Heim  >  Artikel  >  Backend-Entwicklung  >  php正则表达式匹配邮箱的问题解析

php正则表达式匹配邮箱的问题解析

WBOY
WBOYOriginal
2016-07-25 08:57:551268Durchsuche
本文介绍下,在用php中的正则表达式匹配邮箱(EMail)时遇到的一个问题,及解决方法。有需要的朋友参考下吧。

php正则表达式匹配邮箱,代码如下:

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

if(preg_match($a,$b)){
 echo "电子邮件合法";
}else{
 echo "电子邮件不合法啊";
} //by bbs.it-home.org
?>

为何上面的输出为合法呢? {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})$/ 注意头和尾加上了^ $

完善好的代码,如下:

<?php
$a='/^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$/';
$b='1412424545645454545454545k@qq.com';
if(preg_match($a,$b)){
 echo "电子邮件合法";
}else{
 echo "电子邮件非法";
} //by bbs.it-home.org
?>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn