在做表單驗證時對使用者姓名的驗證規則有以下要求
要求:輸入的内容需要滿足的條件是:
1、允許輸入字元:數字(0-9)、字母(a-z和a-z)、漢字、下劃線(_)、圓點(.)和空格;
2、姓名中間允許有空格;
3、下劃線、圓點和空格均為英文狀态輸入法下的字元;
4、姓名前後不允許輸入下劃線、圓點、空格和特殊字元
執行時報錯:severity: warning
後來試了幾次,發現表達式中"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編碼下用正規表達式比對漢字的最終正确表達式是:
于是将“u4e00-u9fa5”替換成“x{4e00}-x{9fa5}”進行嘗試。
注:表達式的最後也要加上‘u’
最後沒有再報錯并且正則比對成功了。