一、利用正则表达式验证中文
注意UTF8编码和GB2312有所不同。
1.UTF8下的中文验证
$str1 = "编程";
$str = "php编程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}
正则表达式提取中文$str = "php编程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}
2.GB2312下中文的验证
if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $st_name){
print("该字符串全部是中文");
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}
print("该字符串不全部是中文");
}
PHP中用正则表达式验证中文的有以下问题需注意
例如:
str = '中华人民共和国123456789abcdefg';
echo preg_match("/^[\u4e00-\u9fa5_a-zA-Z0-9]{3,15}",strName);
str = '中华人民共和国123456789abcdefg';
echo preg_match("/^[\u4e00-\u9fa5_a-zA-Z0-9]{3,15}",strName);
运行一下上面这段代码,看会有什么提示信息?
Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 3 in F:\wwwroot\php\test.php on line 2
Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 3 in F:\wwwroot\php\test.php on line 2
原来,PHP正则表达式中不支持下列 Perl 转义序列:\L, \l, \N, \P, \p, \U, \u, or \X
在 UTF-8 模式下,允许用“\x{...}”,花括号中的内容是表示十六进制数字的字符串。原来的十六进制转义序列 \xhh 如果其值大于 127 的话则匹配了一个双字节 UTF-8 字符。
所以,可以这样来解决preg_match("/^[\x80-\xff_a-zA-Z0-9]{3,15}",strName);
一开始很是疑惑\x80-\xff只能匹配128个字符怎么就可以匹配成千上万的中文呢,原来\x80-\xff只是匹配中文双字节中的一个字节,
所以上面的正则表达式可以匹配范围是128*128个双字节字符。
一开始很是疑惑\x80-\xff只能匹配128个字符怎么就可以匹配成千上万的中文呢,原来\x80-\xff只是匹配中文双字节中的一个字节,
所以上面的正则表达式可以匹配范围是128*128个双字节字符。
function msubstr($str, $from, $len)
{
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
{
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
'$1',$str);
}
二、邮箱的验证
$email="ww@163"
if(ereg("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+$",$st_mail), $email)){
print("邮箱地址正确");
} else {
print("邮箱地址错误");
}
} else {
print("邮箱地址错误");
}
三、验证数字
if(ereg("^[1-9]\d*",$code)){
print("字串为纯数字");
} else {
print("字串不是纯数字");
}
} else {
print("字串不是纯数字");
}
四、验证日期
验证生日是否为合理格式如果不正确提示为yyyy-mm-dd的格式类型。
if (!preg_match("/^(19|20)\d{2}-(0?\d|1[012])-(0?\d|[12]\d|3[01])$/",$st_birthday)){
$erro_msg.=$st_birthday."日期格式错误!正确日期格式为yyyy-mm-dd ! ";}
$erro_msg.=$st_birthday."日期格式错误!正确日期格式为yyyy-mm-dd ! ";}
五、验证表单中运用的isset
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论