admin 管理员组

文章数量: 1086019


2024年4月24日发(作者:片数组词对吗)

一、利用正则表达式验证中文

注意UTF8编码和GB2312有所不同。

8下的中文验证

$str1 = "编程";

$str = "php编程";

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

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

} else {

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

}

2312下中文的验证

if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $st_name){

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

} else {

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

}

PHP中用正则表达式验证中文的有以下问题需注意

例如:

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: 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个双字节字符。

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);

}

二、邮箱的验证

$email="ww@"

if(ereg("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+.[a-zA-Z0-9_-]+$",$st_mail),

$email)){

print("邮箱地址正确");

} else {

print("邮箱地址错误");

}

三、验证数字

if(ereg("^[1-9]d*",$code)){

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 ! ";}

五、验证表单中运用的isset


本文标签: 验证 格式 匹配 数字 字节