>  기사  >  백엔드 개발  >  이메일 주소를 PHP 정규 표현식과 일치시키는 문제 분석

이메일 주소를 PHP 정규 표현식과 일치시키는 문제 분석

WBOY
WBOY원래의
2016-07-25 08:57:551268검색
本文介绍下,在用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
?>


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.