php正则表达式邮箱问题

有个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 "电子邮件不正当啊"; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7885.html