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

WBOY
Release: 2016-06-06 20:42:21
Original
1214 people have browsed it

<code>preg_match('/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/', $username)
</code>
Copy after login
Copy after login

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

回复内容:

<code>preg_match('/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/', $username)
</code>
Copy after login
Copy after login

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

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

/^[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 的正則表達式可以直接匹配雙字節字符。

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!