在php中要利用正則來匹配中文漢字的話我們需要了解字符串編碼然后還有漢字的內碼這樣才可以方便快速的實現精確的匹配中文漢字出來,在php中來判斷字符串是否為中文,就會沿襲這個思路,代碼如下:
- <?php
- $str = "php編程";
- if (preg_match("/^[u4e00-u9fa5]+$/",$str)) {
- print("該字符串全部是中文");
- } else {
- print("該字符串不全部是中文");
- }
- ?>
不過,很快就會發現,php并不支持這樣的表達,報錯:
Warning: preg_match() [function.preg-match]: Compilation failed: PCRE does not support L, l, N, U,or u at offset 3 in test.php on line 3
剛開始從google上查了很多次,想從php正則表達式對于十六進制數據的表達方式上進行突破,發現在php中,是用x表示十六進制數據的,于是,變換成如下的代碼:
- $str = "php編程";
- if (preg_match("/^[x4e00-x9fa5]+$/",$str)) {
- print("該字符串全部是中文");
- } else {
- print("該字符串不全部是中文");
- }
貌似不報錯了,判斷的結果也正確,不過把$str換成“編程”兩字,結果卻還是顯示“該字符串不全部是中文”,看來這樣的判斷還是不夠準確。
如果要精準匹配中文,即匹配純中文字符,或匹配中文字符加上全角標點,則需要根據不同編碼環境使用不同方法。
下面以兩種常用的編碼(gb2312,utf-8)代碼如下:
- //ANSI編程環境下:
- $strtest = “yyg中文字符yyg”;
- $pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";
- if(preg_match($pregstr,$strtest,$matchArray)){
- echo $matchArray[0];
- }
- //output:中文字符
- //Utf-8編程環境下:
- $strtest = “yyg中文字符yyg”;
- $pregstr = "/[x{4e00}-x{9fa5}]+/u";
- if(preg_match($pregstr,$strtest,$matchArray)){
- echo $matchArray[0];
- }
- //output:中文字符
|
新聞熱點
疑難解答