php正则验证中文字符串要点
中文ASCII码有一定的范围,可以用以下正则表达式来表示中文:
例子:
<?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编码表的字符
单纯匹配汉字而不匹配全角标点:
该表达式能匹配一个中文字符。
匹配全角标点而不匹配汉字:
二、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。