php判断全是中文正则,php判断是否为中文正则表达式大全
php判斷是否為中文正則表達式大全
$str="aaa";
if(!eregi("[^\x80-\xff]","$str"))
{
echo "是";
}
else
{
echo "不是";
}
?>
$str = "中國";
echo $str;
echo "
";
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
//只能在GB2312情況下使用
if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8
echo "正確輸入";
} else {
echo "錯誤輸入";
}
?>
如果想判斷一個字符串內是否有含有中文,請用下面的代碼:
if (preg_match("/[\x7f-\xff]/", $string)) {
echo "有中文";
}else{
echo "沒有中文";
}
判斷中文和編碼有關
gbk是雙字節,utf8是三字節,可以根據中文的范圍來判斷
編碼范圍1. GBK
(GB2312/GB18030)?\x00-\xff
GBK雙字節編碼范圍?\x20-\x7f
ASCII?\xa1-\xff
中文?\x80-\xff 中文?2. UTF-8
(Unicode)?\u4e00-\u9fa5
(中文)?\x3130-\x318F
(韓文?\xAC00-\xD7A3
(韓文)?\u0800-\u4e00
(日文)?ps:
韓文是大于[\u9fa5]的字符?正則例子:?preg_replace(”/([\x80-\xff])/”,”",$str);?preg_replace(”/([u4e00-u9fa5])/”,”",$str);
//判斷內容里有沒有中文-GBK?(PHP)
functioncheck_is_chinese($s){
returnpreg_match('/[\x80-\xff]./',$s);
}
//獲取字符串長度-GBK?(PHP)
functiongb_strlen($str){
$count=?0;
for($i=0;$i
$s=substr($str,$i,?1);
if(preg_match("/[\x80-\xff]/",$s))?++$i;
++$count;
}
return$count;
}
//截取字符串字串-GBK?(PHP)
functiongb_substr($str,$len){
$count=?0;
for($i=0;$i
if($count==$len)break;
if(preg_match("/[\x80-\xff]/",substr($str,$i,?1)))?++$i;
++$count;
}
returnsubstr($str,?0,$i);
}
//統計字符串長度-UTF8?(PHP)
functionutf8_strlen($str)?{
$count=?0;
for($i=?0;$i
$value=?ord($str[$i]);
if($value>?127)?{
$count++;
if($value>=?192?&&$value<=?223)$i++;
elseif($value>=?224?&&$value<=?239)$i=$i+?2;
elseif($value>=?240?&&$value<=?247)$i=$i+?3;
elsedie('Not?a?UTF-8?compatible?string');
}
$count++;
}
return$count;
}
//截取字符串-UTF8(PHP)
functionutf8_substr($str,$position,$length){
$start_position=strlen($str);
$start_byte=?0;
$end_position=strlen($str);
$count=?0;
for($i=?0;$i
if($count>=$position&&$start_position>$i){
$start_position=$i;
$start_byte=$count;
}
if(($count-$start_byte)>=$length)?{
$end_position=$i;
break;
}
$value=?ord($str[$i]);
if($value>?127){
$count++;
if($value>=?192?&&$value<=?223)$i++;
elseif($value>=?224?&&$value<=?239)$i=$i+?2;
elseif($value>=?240?&&$value<=?247)$i=$i+?3;
elsedie('Not?a?UTF-8?compatible?string');
}
$count++;
}
return(substr($str,$start_position,$end_position-$start_position));
}
//判斷是否是有韓文-UTF-8?(JavaScript)
functioncheckKoreaChar(str)?{
for(i=0;?i
if(((str.charCodeAt(i)?>?0x3130?&&?str.charCodeAt(i)?=?0xAC00?&&?str.charCodeAt(i)?<=?0xD7A3)))?{
returntrue;
}
}
returnfalse;
}
//判斷是否有中文字符-GBK?(JavaScript)
functioncheck_chinese_char(s){
return(s.length?!=?s.replace(/[^\x00-\xff]/g,"**").length);
}
UTF-8匹配:
在javascript中,要判斷字符串是中文是很簡單的。比如:
var str = "php編程";
if (/^[\u4e00-\u9fa5]+$/.test(str)) {
alert("該字符串全部是中文");
}
else{
alert("該字符串不全部是中文");
}
php中,是用\x表示十六進制數據的。于是,變換成如下的代碼:
$str = "php編程";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str)) {
print("該字符串全部是中文");
} else {
print("該字符串不全部是中文");
}
貌似不報錯了,判斷的結果也正確,不過把$str換成“編程”兩字,結果卻還是顯示“該字符串不全部是中文”,看來這樣的判斷還是不夠準確。
重要:查閱了發現,對于[\x4e00-\x9fa5]這塊東西,自己做一個強化的解釋
php的正則中, [\x4e00-\x9fa5],其實就是 字符和字符組的概念, \x{hex},表達一個16進制數,
需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必須加上大括號,
同時,如果是大于x{FF}的hex,必須和u 修飾符連用,不然會非法出錯
網上只能找到匹配全角字符的正則:?^[\x80-\xff]*^/?,這里可以不加大括號
[\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持?不過,既然\x表示的十六進制數據,為什么和js里邊提供的范圍\x4e00-\x9fa5不一樣呢?于是我就換成了下邊的代碼,發現真的準確了:
$str = "php編程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {
print("該字符串全部是中文");
} else {
print("該字符串不全部是中文");
}
知道了php中utf-8編碼下用正則表達式匹配漢字的最終正確表達式——/^[\x{4e00}-\x{9fa5}]+$/u,
參考以上文章寫了如下一段測試代碼(復制以下代碼保存成.php文件)
$action = trim($_GET['action']);
if($action == "sub")
{
$str =
$_POST['dir'];?//if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str))
//GB2312漢字字母數字下劃線正則表達式
if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))?//UTF-8漢字字母數字下劃線正則表達式
{?echo "
color=red>您輸入的[".$str."]含有違法字符
";?}else
{
echo "
color=green>您輸入的[".$str."]完全合法,通過!
";?}}
?>
action="?action=sub">
輸入字符(數字,字母,漢字,下劃線):
value="">
value="提交">
GBK:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str);
//GB2312漢字字母數字下劃線正則表達式
$str="aaa";
if(!eregi("[^\x80-\xff]","$str"))
{
echo "是";
}
else
{
echo "不是";
}
?>
$str = "中國";
echo $str;
echo "
";
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
//只能在GB2312情況下使用
if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8
echo "正確輸入";
} else {
echo "錯誤輸入";
}
?>
如果想判斷一個字符串內是否有含有中文,請用下面的代碼:
if (preg_match("/[\x7f-\xff]/", $string)) {
echo "有中文";
}else{
echo "沒有中文";
}
總結
以上是生活随笔為你收集整理的php判断全是中文正则,php判断是否为中文正则表达式大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 1581 优先队列 priori
- 下一篇: 钉钉老版本下载3.31_钉钉3.3.1老