有个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})$/
留意头和尾加上了^ $
上改好的代码