搜尋
首頁php教程php手册php正则表达匹配中文问题分析,

php正则表达匹配中文问题分析,

Jun 13, 2016 am 08:44 AM
phpstr中文分析匹配正規則問題

php正则表达匹配中文问题分析,

$str = '中华人民共和国123456789abcdefg';<br />echo preg_match("/^[u4e00-u9fa5_a-zA-Z0-9]{3,15}$",$strName);



 

运行一下上面这段代码,看会有什么提示信息?
 
Warning: preg_match(): Compilation failed: PCRE does not support L, l, N, P, p, U, u, or X at offset 3 in F:http://www.hzhuti.com/nokia/5800/ on line 2
原来,PHP正则表达式中不支持下列 Perl 转义序列:L, l, N, P, p, U, u, or X

在 UTF-8 模式下,允许用“x{...}”,花括号中的内容是表示十六进制数字的字符串。

原来的十六进制转义序列 xhh 如果其值大于 127 的话则匹配了一个双字节 UTF-8 字符。
所以,
可以这样来解决

preg_match("/^[x80-xff_a-zA-Z0-9]{3,15}$",$strName);<br /><br /><br />preg_match('/[x{2460}-x{2468}]/u', $str);


 

匹配 内码汉字
按照他提供的方式进行测试,代码如下:

 代码如下 复制代码 

$str = "php编程";<br />if (preg_match("/^[x{2460}-x{2468}]+$/u",$str)) {<br />print("该字符串全部是中文");<br />} else {<br />print("该字符串不全部是中文");<br />}


 

发现这次依然对是否为中文判断失常。不过,既然x表示的十六进制数据,为什么和js里边提供的范围x4e00-x9fa5不一样呢?于是我就换成了下边的代码:

$str = "php编程";<br />if (preg_match("/^[x4e00-x9fa5]+$/u",$str)) {<br />print("该字符串全部是中文");<br />} else {<br />print("该字符串不全部是中文");<br />}


 

本来以为铁定成功了的事情,没想到,warning又一次产生了:
Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 6 in test.php on line 3

看来又有错误的表达方式了,于是对照了一下那篇文章的表达方式,给“4e00”和“9fa5”两边分别用"{"和“}”包起来,跑了一遍,发现真的准确了:

$str = "php编程";<br />if (preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str)) {<br />print("该字符串全部是中文");<br />} else {<br />print("该字符串不全部是中文");<br />}<br /> 


知道了php中utf-8编码下用正则表达式匹配汉字的最终正确表达式——/^[x{4e00}-x{9fa5}]+$/u,

最后总结出

//if (preg_match(&ldquo;/^[".chr(0xa1)."-".chr(0xff)."]+$/&rdquo;, $str)) { //只能在GB2312情况下使用<br />if (preg_match(&ldquo;/^[x7f-xff]+$/&rdquo;, $str)) { //兼容gb2312,utf-8<br />echo &ldquo;正确输入&rdquo;;<br />} else {<br />echo &ldquo;错误输入&rdquo;;<br />}


 

双字节字符编码范围

1. GBK (GB2312/GB18030)
x00-xff GBK双字节编码范围
x20-x7f ASCII
xa1-xff 中文 gb2312
x80-xff 中文 gbk

2. UTF-8 (Unicode)

u4e00-u9fa5 (中文)
x3130-x318F (韩文
xAC00-xD7A3 (韩文)
u0800-u4e00 (日文)

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境