UTF 8漢字正規表示式

2021-06-22 10:28:37 字數 1213 閱讀 4197

$str = "程式設計";

// if(!preg_match("/^[\x-\xa-za-z0-9_]+$/u",$str))   //utf-8漢字字母數字下劃線正規表示式

if(!preg_match("/^[\x-\x]+$/u",$str))   //utf-8漢字字母數字下劃線正規表示式

else 

else

php中,是用\x表示十六進製制資料的。於是,變換成如下的**:

$str = "php程式設計";

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

貌似不報錯了,判斷的結果也正確,不過把$str換成「程式設計」兩字,結果卻還是顯示「該字串不全部是中文」,看來這樣的判斷還是不夠準確。

重要:查閱了《精通正規表示式》發現,對於[\x4e00-\x9fa5]這塊東西,自己做乙個強化的解釋

php的正則中, [\x4e00-\x9fa5],其實就是  字元和字元組的概念, \x,表達乙個16進製制數, 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必須加上大括號,

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

網上只能找到匹配全形字符的正則:   ^[\x80-\xff]*^/   ,這裡可以不加大括號

[\u4e00-\u9fa5]可以匹配中文,但是php又不支援    

不過,既然\x表示的十六進製制資料,為什麼和js裡邊提供的範圍\x4e00-\x9fa5不一樣呢?於是我就換成了下邊的**,發現真的準確了:

$str = "php程式設計";

if (preg_match("/^[\x-\x]+$/u",$str)) else

知道了php中utf-8編碼下用正規表示式匹配漢字的最終正確表示式——/^[\x-\x]+$/u,

參考以上文章寫了如下一段測試**(複製以下**儲存成.php檔案)

<?php

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

if($action == "sub")

-\xa-za-z0-9_]+$/u",$str))   //utf-8漢字字母數字下劃線正規表示式

else 

}?>

gbk:

preg_match("/^[".chr(0xa1)."-".chr(0xff)."a-za-z0-9_]+$/",$str); //gb2312漢字字母數字下劃線正規表示式

正規表示式匹配漢字

這裡是幾個主要非英文語系字元範圍 2e80 33ffh 中日韓符號區。收容康熙字典部首 中日韓輔助部首 注音符號 日本假名 韓文音符,中日韓的符號 標點 帶圈或帶括符文數字 月份,以及日本的假名組合 單位 年號 月份 日期 時間等。3400 4dffh 中日韓認同表意文字擴充a區,總計收容6,582...

正規表示式 8

非列印字元也可以是正規表示式的組成部分。下表列出了表示非列印字元的轉義序列 含義 cx 匹配 x 指示的控制字元。例如,cm 匹配 control m 或回車符。x 的值必須在 a z 或 a z 之間。如果不是這樣,則假定 c 就是 c 字元本身。f換頁符匹配。等效於 x0c 和 cl。n換行符匹...

php中utf 8編碼下用正規表示式如何匹配漢字

型別 知道了php中utf 8編碼下用正規表示式匹配漢字的最終正確表示式 x x u 在j ascript中,要判斷字串是中文是很簡單的。比如 複製 如下 var str php程式設計 if u4e00 u9fa5 test str else 想當然的,在php中來判斷字串是否為中文,就會沿襲這個...