日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

php判断全是中文正则,php判断是否为中文正则表达式大全

發(fā)布時(shí)間:2024/7/5 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php判断全是中文正则,php判断是否为中文正则表达式大全 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

php判斷是否為中文正則表達(dá)式大全

$str="aaa";

if(!eregi("[^\x80-\xff]","$str"))

{

echo "是";

}

else

{

echo "不是";

}

?>

$str = "中國(guó)";

echo $str;

echo "


";

//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {

//只能在GB2312情況下使用

if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8

echo "正確輸入";

} else {

echo "錯(cuò)誤輸入";

}

?>

如果想判斷一個(gè)字符串內(nèi)是否有含有中文,請(qǐng)用下面的代碼:

if (preg_match("/[\x7f-\xff]/", $string)) {

echo "有中文";

}else{

echo "沒有中文";

}

判斷中文和編碼有關(guān)

gbk是雙字節(jié),utf8是三字節(jié),可以根據(jù)中文的范圍來(lái)判斷

編碼范圍1. GBK

(GB2312/GB18030)?\x00-\xff

GBK雙字節(jié)編碼范圍?\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);

//判斷內(nèi)容里有沒有中文-GBK?(PHP)

functioncheck_is_chinese($s){

returnpreg_match('/[\x80-\xff]./',$s);

}

//獲取字符串長(zhǎng)度-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);

}

//統(tǒng)計(jì)字符串長(zhǎng)度-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中,要判斷字符串是中文是很簡(jiǎn)單的。比如:

var str = "php編程";

if (/^[\u4e00-\u9fa5]+$/.test(str)) {

alert("該字符串全部是中文");

}

else{

alert("該字符串不全部是中文");

}

php中,是用\x表示十六進(jìn)制數(shù)據(jù)的。于是,變換成如下的代碼:

$str = "php編程";

if (preg_match("/^[\x4e00-\x9fa5]+$/",$str)) {

print("該字符串全部是中文");

} else {

print("該字符串不全部是中文");

}

貌似不報(bào)錯(cuò)了,判斷的結(jié)果也正確,不過(guò)把$str換成“編程”兩字,結(jié)果卻還是顯示“該字符串不全部是中文”,看來(lái)這樣的判斷還是不夠準(zhǔn)確。

重要:查閱了發(fā)現(xiàn),對(duì)于[\x4e00-\x9fa5]這塊東西,自己做一個(gè)強(qiáng)化的解釋

php的正則中, [\x4e00-\x9fa5],其實(shí)就是 字符和字符組的概念, \x{hex},表達(dá)一個(gè)16進(jìn)制數(shù),

需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必須加上大括號(hào),

同時(shí),如果是大于x{FF}的hex,必須和u 修飾符連用,不然會(huì)非法出錯(cuò)

網(wǎng)上只能找到匹配全角字符的正則:?^[\x80-\xff]*^/?,這里可以不加大括號(hào)

[\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持?不過(guò),既然\x表示的十六進(jìn)制數(shù)據(jù),為什么和js里邊提供的范圍\x4e00-\x9fa5不一樣呢?于是我就換成了下邊的代碼,發(fā)現(xiàn)真的準(zhǔn)確了:

$str = "php編程";

if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {

print("該字符串全部是中文");

} else {

print("該字符串不全部是中文");

}

知道了php中utf-8編碼下用正則表達(dá)式匹配漢字的最終正確表達(dá)式——/^[\x{4e00}-\x{9fa5}]+$/u,

參考以上文章寫了如下一段測(cè)試代碼(復(fù)制以下代碼保存成.php文件)

$action = trim($_GET['action']);

if($action == "sub")

{

$str =

$_POST['dir'];?//if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str))

//GB2312漢字字母數(shù)字下劃線正則表達(dá)式

if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))?//UTF-8漢字字母數(shù)字下劃線正則表達(dá)式

{?echo "

color=red>您輸入的[".$str."]含有違法字符

";?}

else

{

echo "

color=green>您輸入的[".$str."]完全合法,通過(guò)!

";?}

}

?>

action="?action=sub">

輸入字符(數(shù)字,字母,漢字,下劃線):

value="">

value="提交">

GBK:

preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str);

//GB2312漢字字母數(shù)字下劃線正則表達(dá)式

$str="aaa";

if(!eregi("[^\x80-\xff]","$str"))

{

echo "是";

}

else

{

echo "不是";

}

?>

$str = "中國(guó)";

echo $str;

echo "


";

//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {

//只能在GB2312情況下使用

if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8

echo "正確輸入";

} else {

echo "錯(cuò)誤輸入";

}

?>

如果想判斷一個(gè)字符串內(nèi)是否有含有中文,請(qǐng)用下面的代碼:

if (preg_match("/[\x7f-\xff]/", $string)) {

echo "有中文";

}else{

echo "沒有中文";

}

總結(jié)

以上是生活随笔為你收集整理的php判断全是中文正则,php判断是否为中文正则表达式大全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。