正则表达式匹配汉字

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