php正则验证中文字符串要点解析

发布时间:2019-07-14编辑:脚本学堂
有关php正则表达式验证中文字符串的方法,为解决中文ascii码的有限范围问题,可以用正则表达式来表示中文,并介绍了有关汉字编码的方法,utf-8环境使用元字符匹配字符串最好加上修正符u。

php正则验证中文字符串要点

中文ASCII码有一定的范围,可以用以下正则表达式来表示中文:
 

/^[chr(0xa1)-chr(0xff)]+$/

例子:
 

复制代码 代码示例:

<?php
function preg_china($str){
if  (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
  echo "这是一个纯中文字符串";
} else {
  echo "这不是一个纯中文字符串";
}
}

$str = "这是学习笔记";
$str2 = "这是PHP学习笔记";

preg_china($str);
preg_china($str2);
?>

因汉字跟编码有关系,所以修正为:
 

复制代码 代码示例:

<?php
function check_str($str,$ch='utf-8'){
if($ch == 'gb2312'){
if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)){ //GB2312汉字字母数字下划线正则表达式 
echo"<font color=red>您输入的[".$str."]含有违法字符</font>"; 
}else{
 echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>"; 
}
}else{
if(!preg_match("/^[x{4e00}-x{9fa5}A-Za-z0-9_]+$/u",$str)){   //UTF-8汉字字母数字下划线正则表达式
echo"<font color=red>您输入的[".$str."]含有违法字符</font>"; 
}else{
echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>"; 
}
}

}
$str = "这是学习笔记";
check_str($str,$ch='utf-8')

?>

一、在ANSI(gb2312)环境下
匹配全部的gb2312编码表的字符

:/[".chr(0xb0)."-".chr(0xf7)."]+/
 

单纯匹配汉字而不匹配全角标点:

/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])/


该表达式能匹配一个中文字符。
匹配全角标点而不匹配汉字:

/([".chr(0xa1)."-".chr(0xa3)."][".chr(0xa1)."-".chr(0xff)."])/

二、utf-8环境下中文的匹配
汉字编码范围是0x4e00-0x9fa5,于 是正则式可以这样写:/[x{4e00}-x{9fa5}]/u
x{nnnn}表示字符的十六进制形式,更多信息请查看php手册

注意,模式修正符u,php手册里这样说:
u(PCRE_UTF8)此修正符启用了一个PCRE中与Perl不兼容的额外功能。

模式字符串被当成UTF-8。本修正符在Unix下自PHP 4.1.0起可用,在win32下自PHP 4.2.3起可用。

自PHP 4.3.5起开始检查模式的UTF-8合法性。

这正是正确匹配所必须的。

注意:utf-8环境下,使用元字符匹配字符串最好加上修正符u。