博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 正则匹配中文(转)
阅读量:4873 次
发布时间:2019-06-11

本文共 1497 字,大约阅读时间需要 4 分钟。

我使用正则表达式来匹配中问的时候,出现了无法匹配的问题,问题如下

 PCRE does not support \L, \l, \N{name}, \U, or \u at offset 2 

我原来的匹配公式是:

/[\u4e00-\x9fa5]/

然后我在网上找的,下面的解决方案

解决后的匹配方案是:

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

下面是具体文章

在做表单验证时对用户姓名的验证规则有以下要求
要求:输入的内容需要满足的条件是:
 
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,L \ N {名称},\ U,或\ U在抵消12
 
  后来试了几次,发现表达式中"\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’
最后没有再报错并且正则匹配成功了。
原文地址:
http://blog.sina.com.cn/s/blog_8122f6b70101hifb.html

转载于:https://www.cnblogs.com/ningheshutong/p/5278423.html

你可能感兴趣的文章
Linux/shell: Concatenate multiple lines to one line
查看>>
石墨烯的晶格和能带结构
查看>>
[STM32]HardFault 定位办法
查看>>
我的打车奇遇!一位出租车司机的互联网生活。本人原创,绝对真实!推荐互联网、移动互联网朋友们看看...
查看>>
优先队列(堆)
查看>>
超级方便的linux命令手册
查看>>
4.SoapUI接口测试--使用EXCEL参数化
查看>>
ASP.NET Page
查看>>
NodeJs回顾
查看>>
出差(3~二)
查看>>
comboBox的id返回System.Data.DataRowView
查看>>
vue.js(二)
查看>>
SSH如何通过公钥连接云服务器
查看>>
C++primer 8.2.2节练习
查看>>
ThinkPHP 3.1.2 视图 1
查看>>
logstash 操作redis
查看>>
14.6.3.4 Configuring InnoDB Buffer Pool Prefetching (Read-Ahead) 配置InnoDB Buffer pool 预取
查看>>
mojo 接口返回键值对的json格式
查看>>
iot 表索引dump《2》
查看>>
最简单的php验证码
查看>>