您好,登錄后才能下訂單哦!
在PHP中使用正則匹配中文,很多時候會出現問題,在不同的編碼情況下,正則表達式不太一樣,所以希望大家注意,在使用正則匹配中文的時候,多多注意編碼問題。
在JS下能夠使用的在PHP中不一定可以使用,比如:/^[a-zA-Z0-9\_\.\_\.\u4E00-\u9FA5\uF900-\uFA2D]+$/;
如果在PHP中使用 :\u4E00-\u9FA5\uF900-\uFA2D 來匹配,那么會在運行PHP腳本的時候出現錯誤,
Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 6
那是因為:PHP正則表達式中不支持下列 Perl 轉義序列:\L, \l, \N, \P, \p, \U, \u, or \X
但是在在 UTF-8 模式下,允許用“\x{...}”,花括號中的內容是表示十六進制數字的字符串,一下給出了一個簡單的中文匹配示例:
//匹配中文、英文字符、數字、特殊符號全角除外 $str = 'adf^^**^k2)(*&3423sfdgsdf#$%^423jkalk阿拉丁解放路dsfj'; $rule = "/([\x80-\xff]{1,})/"; echo "<pre>"; preg_match_all("/([?=[\x21-\x7e]{1,}|[A-Za-z0-9]{1,}|[\x{4e00}-\x{9fa5}]{1,})/u", $str, $m); var_dump($m); //支持特殊符號(半角) $rule = "/((?=[\x21-\x7e])[^A-Za-z0-9]){1,}/u"; preg_match($rule, $str, $m); var_dump($m); //匹配中文···· $str = "erwerwe.·中文·匹配·324#¥%……"; $rule = "/([\x{4e00}-\x{9fa5}\·]{1,})/ius"; preg_match($rule, $str, $m); var_dump($m); //匹配郵件 $email ="qwerty234234@234567_#$%@yahoo.cn"; //$email = "bieru52@aliyun.com"; $rule = "/(^[a-zA-Z0-9][a-zA-Z0-9\.\_\-]{1,30}@[a-zA-Z0-9_-]{1,10}(\.[a-zA-Z0-9_-]{1,10}){0,4})\.[a-zA-Z]{1,10}$/"; $m = preg_match($rule, $email); var_dump($m);
雙字節字符編碼范圍
GBK (GB2312/GB18030)
x00-xff GBK雙字節編碼范圍
x20-x7f ASCII
xa1-xff 中文 gb2312
x80-xff 中文 gbk
UTF-8 (Unicode)
u4e00-u9fa5 (中文)
參考文檔: 正則表達式30分鐘入門教程
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。