欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-04-11 09:53:56
...
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 的正則表達式可以直接匹配雙字節字符。

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

相关标签: php 正则表达式