正则与UTF-8汉字:你理解[\x{4e00}-\x{9fa5}]吗?
使用 preg_match('!^[\x{4e00}-\x{9fa5}]+$!u',$str) 可以精确地鉴定UTF-8编码的字符串是否全部是汉字。
以前我虽然知道这么用,但是从没有理解过。UTF-8的汉字不是三字节吗?但4e00和9fa5却只有两字节啊,怎么匹配?我同样不解,模式修饰符u到底意味着什么?
于是我开始百度,终于看到这样一句话,“从Unicode编码表(中日韩字)可以看出,汉字的编码是从4e00到9fa5”。
Unicode编码?对啊,Unicode编码正好是两字节的。4e00是汉字“一”,而9fa5是繁体显示不出来。
这样一来,模式修饰符u的作用就清楚了。它很可能是把UTF-8的字符串转成Unicode字符串来匹配了(匹配后输出结果时再转成UTF-8)。
使用 preg_match('!^[\x{4e00}-\x{9fa5}]+$!u',$str)这是什么意思,怎么用,谢谢