正则表达式匹配汉字
PHP正则表达式匹配汉字
正确的正则表达式
$reg = '/^[\x{4e00}-\x{9fa5}]+$/u';
错误的正则表达式
$reg = '/^[\u4e00-\u9fa5]+$/u';
PHP 正则表达式(PCRE)之Unicode
PCRE支持的16进制字符编码转义符有\x00-\xFF,或\x{num},num为任意位16进制数
但并不支持\u0000-\uFFFF这的形式
PCRE运用/u模式去处理UTF-8编码字符,这是PCRE特有的,示例代码
$str = '中123abcd个业上';
$pattern = '/[\x{4E10}-\x{4E2F}\x{4E0A}]/u';
$matchs = array();
$result = preg_match_all($pattern, $str, $matchs);
var_dump($result, $matchs);
输出结果:
int(4)
array(1) {
[0]=>
array(4) {
[0]=>
string(3) "中"
[1]=>
string(3) "个"
[2]=>
string(3) "业"
[3]=>
string(3) "上"
}
}
示例:正则校验昵称是否只包含数字、字母、下划线、汉字
$nickname='陈先生123';
if (!preg_match("/^[0-9a-zA-Z _\x{4e00}-\x{9fa5}]+$/u", $nickname)) {
echo '昵称不应包含特殊字符';
} else {
echo 'success';
}
输出结果
success