php 正则中文匹配

php 正则中文匹配汉字一定注意是 gbk 还是 utf8 编码 UTF 8 匹配 在 javascript 中 要判定字符串是中文是很简朴的 比如 varstr php 编程 if u4e00 u9fa5 test str alert 该字符串全部是中文 else alert 该字符串不全部是中文 php 中 是用 UTF 8 匹配 在 javascript 中

汉字一定注意是gbk还是utf8编码

UTF-8匹配:在javascript中,要判定字符串是中文是很简朴的。比如:var str = “php编程”;if (/^[\u4e00-\u9fa5]+$/.test(str)) {alert(“该字符串全部是中文”);} else{alert(“该字符串不全部是中文”);}php中,是用 …

  UTF-8匹配:

  在javascript中,要判定字符串是中文是很简朴的。比如:

  var str = “php编程”;

  if (/^[\u4e00-\u9fa5]+$/.test(str)) {

  alert(“该字符串全部是中文”);

  }

  else{

  alert(“该字符串不全部是中文”);

  }

  php中,是用\x表示十六进制数据的。于是,变换成如下的代码:

  $str = “php编程”;

  if (preg_match(“/^[\x4e00-\x9fa5]+$/”$str)) {

  print(“该字符串全部是中文”);

  } else {

  print(“该字符串不全部是中文”);

  }

  貌似不报错了,判定的结果也准确,不过把$str换成“编程”两字,结果却还是显示“该字符串不全部是中文”,看来这样的判定还是不够准确。

  网上只能找到匹配全角字符的正则: ^[\x80-\xff]*^/

  [\u4e00-\u9fa5]可以匹配中文但是PHP又不支持

  可能还跟编码有关系,因此需要了解一下模式修正符的相关知识.

  在一篇《模式修正符》的文章中了解到:

  u (PCRE_UTF8)

  此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。

  例子:

  preg_match(‘/[\x{2460}-\x{2468}]/u’ $str); 匹配 内码汉字

  按照他提供的方式进行测试,代码如下:

  $str = “php编程”;

  if (preg_match(“/^[\x{2460}-\x{2468}]+$/u”$str)) {

  print(“该字符串全部是中文”);

  } else {

  print(“该字符串不全部是中文”);

  }

  发现这次依然对是否为中文判定失常。

  不过,既然\x表示的十六进制数据,为什么和js里边提供的范围\x4e00-\x9fa5不一样呢?于是我就换成了下边的代码发现真的准确了:

  $str = “php编程”;

  if (preg_match(“/^[\x{4e00}-\x{9fa5}]+$/u”$str)) {

  print(“该字符串全部是中文”);

  } else {

  print(“该字符串不全部是中文”);

  }

  知道了php中utf-8编码下用正则表达式匹配汉字的最终准确表达式——/^[\x{4e00}-\x{9fa5}]+$/u,

  参考以上文章写了如下一段测试代码(复制以下代码保存成.php文件)

  输入字符(数字字母汉字下划线):

  GBK:

  preg_match(“/^[“.chr(0xa1).”-“.chr(0xff).”A-Za-z0-9_]+$/”$str); //GB2312汉字字母数字下划线正则表达式

 

 

 

本文章总结了php中利用正则表达式来匹配中文的一些实例函数,有需要的朋友可参考参考。

2. UTF-8 (Unicode)

 代码如下 复制代码
$str = ‘正则如何匹配中文字在某中文字符串中?’;
preg_match(“/中/”,$str,$regs);
print_r($regs);
?>


例2

 代码如下 复制代码

签里面有中文、英文、数字等混排,则需要对汉字进行特殊处理,由于PCRE不支持U P L之类的perl字符串处理转义,使用16进制或者Unicode进行处理,范例如下:

 代码如下 复制代码
 代码如下 复制代码
 代码如下 复制代码

$patt_ch = chr(0xa1) . “-” . chr(0xff);

更多详细内容请查看:http://www.php100.com/phper/php-cy/34301.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230074.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:10
下一篇 2026年3月16日 下午3:11


相关推荐

  • 细数人们对安卓的误解

    误解一:安卓是iOS的后辈不知不觉,安卓已经成为了世界上最流行的移动智能系统,就市场占有率来看,安卓甚至要高于引领了智能机和平板电脑革命的iOS。安卓的红火深远地影响了IT行业,全球最大的社交网络F

    2021年12月27日
    56
  • 二十、Sql Server 保留几位小数的两种做法

    二十、Sql Server 保留几位小数的两种做法问题:数据库里的floatmomey类型,都会精确到多位小数。但有时候我们不需要那么精确,例如,只精确到两位有效数字。解决:1.使用Round()函数,如Round(@num,2)参数2表示保留两位有效数字。2.更好的方法是使用Convert(decimal(18,2),@num)实现转换,decimal(18,2)…

    2022年7月20日
    33
  • mqtt支持加密通讯

    mqtt支持加密通讯1.mqtt第三方库支持openssla,编译openssl库(我使用的是1.0.1),在mqtt源码目录下创建openssl文件夹,并拷贝编译完成的库文件与头文件到此文件夹下。b,修改mqtt(源码从git上获取https://github.com/eclipse/paho.mqtt.c.git)编译选项,PAHO_WITH_SSL,OPENSSL_SEARCH_PATH…

    2022年6月6日
    64
  • java绝对值判断_Java判断绝对值的方法总结[通俗易懂]

    if-else语句判断:importjava.util.Scanner;publicclassAbsoluteValue{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);//声明扫描仪变量System.out.println(“请输入数值”);//系统提示输入try{//监听异常whi…

    2022年4月8日
    86
  • java退出foreach循环_forEach方法如何跳出循环[通俗易懂]

    java退出foreach循环_forEach方法如何跳出循环[通俗易懂]1.for方法跳出循环functiongetItemById(arr,id){varitem=null;for(vari=0;i<arr.length;i++){if(arr[i].id==id){item=arr[i];break;}}returnitem;}2.forEach方法跳出循环functiongetItemById(arr,id)…

    2022年5月24日
    70
  • Odin Inspector 系列教程 — Hide If Attribute[通俗易懂]

    Odin Inspector 系列教程 — Hide If Attribute[通俗易懂]HideIfAttribute用于任何属性,并且可以在检查器中隐藏该属性。使用此选项可根据对象的当前状态隐藏不相关的属性。传一个属性的名称,此属性的值如果为true或者部位null,则隐藏此属性[HideIf(“IsToggled”)]publicVector3HiddenWhenToggled;[HideIf(“Som…

    2022年7月21日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号