ホームページ > バックエンド開発 > PHPチュートリアル > 这句正则表示的什么意思?

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

WBOY
リリース: 2016-06-06 20:42:21
オリジナル
1239 人が閲覧しました

<code>preg_match('/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/', $username)
</code>
ログイン後にコピー
ログイン後にコピー

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

回复内容:

<code>preg_match('/^[a-zA-Z0-9_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+$/', $username)
</code>
ログイン後にコピー
ログイン後にコピー

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

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

/^[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.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート