当前位置:Gxlcms > PHP教程 > 这句正则表示的什么意思?

这句正则表示的什么意思?

时间:2021-07-01 10:21:17 帮助过:15人阅读

preg_match('/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/', $username)

看上面的代码,谁能解释一下。最好能详细一些。谢谢了

回复内容:

preg_match('/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/', $username)

看上面的代码,谁能解释一下。最好能详细一些。谢谢了

全部爲字母或數字或下劃線或漢字 組成的字符,需要兩個以上。

/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/

^ 匹配開頭
$ 匹配結尾

[a-zA-Z0-9_] 匹配一個數字大小寫字母下劃線
[\x7f-\xff] 匹配一個編碼在該區間內的字符

實際上可以寫成 /^[a-zA-Z0-9_\x80-\xff]{2,}$/

{2,} 代表要匹配兩個及以上字符

因爲漢字第一位是 1,整個字符大於 127,是不會包括 \x7f 的,所以可以把 \x7f 改成 \x80 (應該)。

又及:pregperl regular expression 的縮寫。

另外,以上代碼只確保中文一定被匹配,不確保匹配的一定是中文。還可能是亂碼(比如奇數個。。。)什麼的。

所以最好還是 /^(?:[a-zA-Z0-9_]|[\x80-\xff]{2})+$/ 保險一些。至於具體漢字日文什麼的得看具體編碼是什麼了。

還有不知爲什麼,js 的話要用 [^\x00-\xff] 而非 [\x80-\xff],可能是對多字節字符支持的差異吧。

補充:「js 中的字符串是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。」所以 js 的正則表達式可以直接匹配雙字節字符。

字母或数字或下划线或汉字 组成的字符,需要两个以上

人气教程排行