php正则表达式邮箱问题

作者:enenba | 发表于:2012-04-27 00:08 | 分类:正则表达式

有个php正则表达式邮箱问题

$a='/([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})/';
$b='1412424545645454545454545k@qq.com';

if(preg_match($a,$b)){
	echo "电子邮件合法";
}else{
	echo "电子邮件不合法啊";
}

 

为何上面的输出为合法???{2,10}这里不是只能放2到10位数字吗 这里已经超出了10位了

 

这个正则是能匹配的,匹配到这样这部分 '545454545k@qq.com'
前面部分的1412424545645454不匹配,所以还是合法的。
你想要匹配一整段正确可以改成这样
$a='/^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$/';

 要注意你的正则  /([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})/
他没有断言,意味着只要字符串中有符合的部分就匹配
因此{2,10}是只能2到10位匹配,但不针对整个字符串只要有一部分符合就匹配了。

你要判断一整段字符串是否都匹配就要用断言。如^ $
/^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$/
注意头和尾加上了^ $

上改好的代码

$a='/^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$/';
$b='1412424545645454545454545k@qq.com';
if(preg_match($a,$b)){
 echo "电子邮件合法";
}else{
 echo "电子邮件不合法啊";
}

上一篇: php自动转换字符集函数,从thinkphp中提取   |   下一篇:tab申缩滑动特效 JQ插件kwicks» 标签: PHP验证 正则匹配

评论: