解决php正则表达式验证中文的问题

发布时间:2020-06-28编辑:脚本学堂
php正则表达式验证中文,不支持转义,所以在php编程时,如果需要验证中文,就要考虑一些变通的方法。有需要的朋友,可以看看本文的介绍。

例如,有如下的代码:
 

复制代码 代码示例:
<?php
$str = '中华人民共和国123456789abcdefg';
echo preg_match("/^[u4e00-u9fa5_a-zA-Z0-9]{3,15}$",$strName);
?>

运行上面代码,会提示:
Warning: preg_match(): Compilation failed: PCRE does not support L, l, N, P, p, U, u, or X at offset 3 in F:wwwrootphptest.php on line 2

究其原因,是因为:PHP正则表达式中不支持下列 Perl 转义序列:L, l, N, P, p, U, u, or X

在 UTF-8 模式下,允许用“x{...}”,花括号中的内容是表示十六进制数字的字符串。
原来的十六进制转义序列 xhh 如果其值大于 127 的话则匹配了一个双字节 UTF-8 字符。

解决方法:
preg_match("/^[x80-xff_a-zA-Z0-9]{3,15}$",$strName);

比如下面的例子:
 

复制代码 代码示例:
<?php
/**
 * php正则表达式验证中文
 * edit www.jb200.com
*/
$shouji ="哈哈哈哈";
if (!preg_match("/^[x80-xff]{6,30}$/",$shouji)){
echo "nonono";
}
else {
echo "yesyesyes";
}
?>