国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

UTF-8正則表達(dá)式如何匹配漢字

2024-04-25 20:40:38
字體:
供稿:網(wǎng)友

判斷輸入內(nèi)容是否含有違法字符,請看下面代碼

$str = "編程";

// if(!preg_match("/^[/x{4e00}-/x{9fa5}A-Za-z0-9_]+$/u",$str))

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

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

{

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

}

else

{

echo "<font color=green>您輸入的[".$str."]完全合法,通過!</font>";

}

-----------------------

UTF-8匹配:

在javascript中,要判斷字符串是中文是很簡單的。

比如:

代碼如下:

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("該字符串不全部是中文");

}

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

重要:

查閱了<精通正則表達(dá)式>發(fā)現(xiàn),對于[/x4e00-/x9fa5]這塊東西,自己做一個強(qiáng)化的解釋

php的正則中, [/x4e00-/x9fa5],其實就是 字符和字符組的概念, /x{hex},表達(dá)一個16進(jìn)制數(shù), 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必須加上大括號,

同時,如果是大于x{FF}的hex,必須和u 修飾符連用,不然會非法出錯

網(wǎng)上只能找到匹配全角字符的正則: ^[/x80-/xff]*^/ ,這里可以不加大括號 [/u4e00-/u9fa5]可以匹配中文,但是PHP又不支持 不過,既然/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, 參考以上文章寫了如下一段測試代碼(復(fù)制以下代碼保存成.php文件)

<?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 "<font color=red>您輸入的[".$str."]含有違法字符</font>";

}

else

{

echo "<font color=green>您輸入的[".$str."]完全合法,通過!</font>";

} }

?<form method="POST" action="?action=sub"> 輸入字符(數(shù)字,字母,漢字,下劃線):

<input type="text" name="dir" value="">

<input type="submit" value="提交">

</form>

GBK:

代碼如下:

preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312漢字字母數(shù)字下劃線正則表達(dá)式

以上內(nèi)容就是PHP中UTF-8正則表達(dá)式如何匹配漢字的全部內(nèi)容,希望大家喜歡。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 庆安县| 瑞金市| 德钦县| 大石桥市| 兰西县| 云阳县| 兴和县| 诸城市| 左权县| 黔西| 清丰县| 铜川市| 呼伦贝尔市| 东乡| 津南区| 静海县| 武功县| 金堂县| 永济市| 大渡口区| 成都市| 湟源县| 萝北县| 石门县| 新绛县| 抚远县| 花莲县| 眉山市| 杭锦后旗| 波密县| 密云县| 昭觉县| 六安市| 黑河市| 玛曲县| 镇康县| 商洛市| 北辰区| 新河县| 宁国市| 潜江市|