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 (應該)。
Unix in a Nutshell同时涵盖了许多重要的、业界标准的开放源码工具 本书还完整地讨论了常用的shell(bash、ksh及tcsh)和重要元素如正则表达式,乃至旧式工具如sed、awk与vi。 Unix不是一个庞大的物体:它是一个综合体,而《Unix技术手册》则是将这一切合并在一起的一本书。 到底unix是什么?原始的unix源码是由sco拥有,unix注册商标是由open group拥有,而领先的仿unix系统则是gnu/linux、mac os x及solaris。这些版本所附的命令与选
又及:preg 是 perl regular expression 的縮寫。
另外,以上代碼只確保中文一定被匹配,不確保匹配的一定是中文。還可能是亂碼(比如奇數個。。。)什麼的。
所以最好還是 /^(?:[a-zA-Z0-9_]|[\x80-\xff]{2})+$/ 保險一些。至於具體漢字日文什麼的得看具體編碼是什麼了。
還有不知爲什麼,js 的話要用 [^\x00-\xff] 而非 [\x80-\xff],可能是對多字節字符支持的差異吧。
補充:「js 中的字符串是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。」所以 js 的正則表達式可以直接匹配雙字節字符。
字母或数字或下划线或汉字 组成的字符,需要两个以上









