开发者社区> progpark> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PHP 正则匹配中文

简介: 在做表单验证时对用户姓名的验证规则有以下要求 要求:输入的内容需要满足的条件是: 1、允许输入字符:数字(0-9)、字母(a-z和A-Z)、汉字、下划线(_)、圆点(.)和空格; 2、姓名中间允许有空格; 3、下划线、圆点和空格均为英文状态输入法下的字符; 4、姓名前后不允许输入下划线、圆
+关注继续查看

在做表单验证时对用户姓名的验证规则有以下要求
要求:输入的内容需要满足的条件是:

1、允许输入字符:数字(0-9)、字母(a-z和A-Z)、汉字、下划线(_)、圆点(.)和空格;
2、姓名中间允许有空格;
3、下划线、圆点和空格均为英文状态输入法下的字符;
4、姓名前后不允许输入下划线、圆点、空格和特殊字符

$str = 'abc测试 ef';
if (preg_match('/^[a-zA-Z0-9\u4e00-\u9fa5]+$|^[a-zA-Z0-9\u4e00-\u9fa5][a-zA-Z0-9_\s\ \u4e00-\u9fa5\.]*[a-zA-Z0-9\u4e00-\u9fa5]+$/', $str)) {
   echo "符合验证规则";
} else {
   echo "不符合验证规则";
}

执行时报错:Severity: Warning

Message: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 12
错误的大概意思是:preg_match()[函数。):编译失败:PCRE不支持\L, \I, \N{名称}, \U或\u

后来试了几次,发现表达式中"u4e00-u9fa5" 匹配中文时出问题了,正常情况下匹配中文是这样写的啊,所以很纳闷,于是在网上搜了搜发现在php中 不支持这样的表达式匹配中文
网上在一篇“模式修正符”的文章中介绍到:
u(PCRE_UTF8)
此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。自 PHP 4.3.5 起开始检查模式的 UTF-8 合法性。
既然是不兼容,那php中是如何匹配到中文呢?
仔细查了查发现php中utf-8编码下用正则表达式匹配汉字的最终正确表达式是:

/^[\x{4e00}-\x{9fa5}]+$/u

于是将“u4e00-u9fa5”替换成“x{4e00}-x{9fa5}”进行尝试。

if (preg_match('/^[a-zA-Z0-9\x{4e00}-\x{9fa5}]+$|^[a-zA-Z0-9\x{4e00}-\x{9fa5}][a-zA-Z0-9_\s\ \x{4e00}-\x{9fa5}\.]*[a-zA-Z0-9\x{4e00}-\x{9fa5}]+$/u', $str)) {
    echo "符合验证规则";
} else {
    echo "不符合验证规则";
}

注:表达式的最后也要加上‘u’
最后没有再报错并且正则匹配成功了。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
centos下 Apache、php、mysql默认安装路径
apache: 如果采用RPM包安装,安装路径应在 /etc/httpd目录下 apache配置文件:/etc/httpd/conf/httpd.conf Apache模块路径:/usr/sbin/apachectl web目录:/var/www/html 如果采用源代码安装,一般默认安装在/usr/local/apache2目录下 php: 如果采用RPM包安装,安装路
2292 0
PHP文件下载函数(从MySQL提取文件路径)
<?php header("Content-type: text/html;charset=utf-8"); require("include/MysqlConn.php"); // 获得ID $id=$_GET['id']; // 判断是否有参数 if (!$id) {     die ("缺少.
2445 0
PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)
原文:PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo) PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案。
2543 0
+关注
progpark
PHP技术经理一枚
文章
问答
文章排行榜
最热
最新
相关电子书
更多
yqdh_58c127bb3e4...1510402406.pdf
立即下载
yqdh_58c127b2209...1510402321.pdf
立即下载
yqdh_58c12868b79...1510402143.pdf
立即下载