PHP正則匹配漢字

我使用正則表達式來匹配中問的時候,出現了沒法匹配的問題,問題以下php

PCRE does not support \L, \l, \N{name}, \U, or \u at offset 2正則表達式

我原來的匹配公式是:函數

/[\u4e00-\x9fa5]/測試

而後我在網上找的,下面的解決方案編碼

解決後的匹配方案是:utf-8

/^[\x{4e00}-\x{9fa5}]+$/u字符串

下面是具體文章it

在作表單驗證時對用戶姓名的驗證規則有如下要求 要求:輸入的內容須要知足的條件是:io

1.容許輸入字符:數字(0-9)、字母(a-z和A-Z)、漢字、下劃線()、圓點(.)和空格; 二、姓名中間容許有空格; 三、下劃線、圓點和空格均爲英文狀態輸入法下的字符; 四、姓名先後不容許輸入下劃線、圓點、空格和特殊字符 $str = 'abc測試 ef'; if(preg_match('/^[a-zA-Z0-9\u4e00-\u9fa5]+$|^[a-zA-Z0-9\u4e00-\u9fa5][a-zA-Z0-9\s\ \u4e00-\u9fa5.]*[a-zA-Z0-9\u4e00-\u9fa5]+$/',$str)){ echo "符合驗證規則"; }else{ echo "不符合驗證規則"; } 執行時報錯:Severity: Warning Message: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 12 錯誤的大概意思是:preg_match()[函數。):編譯失敗:PCRE不支持\ \ L,L \ N {名稱},\ U,或\ U在抵消12編譯

後來試了幾回,發現表達式中"\u4e00-\u9fa5" 匹配中文時出問題了,正常狀況下匹配中文是這樣寫的啊,因此很納悶,因而在網上搜了搜發如今php中 不支持這樣的表達式匹配中文 網上在一篇「模式修正符」的文章中介紹到: u(PCRE_UTF8) 此修正符啓用了一個 PCRE 中與 Perl 不兼容的額外功能。模式字符串被當成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起開始檢查模式的 UTF-8 合法性。 既然是不兼容,那php中是如何匹配到中文呢? 仔細查了查發現php中utf-8編碼下用正則表達式匹配漢字的最終正確表達式是:/^[\x{4e00}-\x{9fa5}]+$/u, 因而將「\u4e00-\u9fa5」替換成「\x{4e00}-\x{9fa5}」進行嘗試。 if(preg_match('/^[a-zA-Z0-9\x{4e00}-\x{9fa5}]+$|^[a-zA-Z0-9\x{4e00}-\x{9fa5}][a-zA-Z0-9_\s\ \x{4e00}-\x{9fa5}.]*[a-zA-Z0-9\x{4e00}-\x{9fa5}]+$/u',$str)){ echo "符合驗證規則"; }else{ echo "不符合驗證規則"; } 注:表達式的最後也要加上‘u’ 最後沒有再報錯而且正則匹配成功了。

相關文章
相關標籤/搜索