15.5.3 检查Email地址的正则表达式
这一小节介绍如何使用正则表达式来检查一个Email地址是否是合法的格式。Email地址一般由3部分构成,它们是:
❑用户名,即符号@左边的所有字符。
❑符号@。
❑服务器域名,即符号@右边的所有字符,通常这些字符应该组成一个合法的域名,如php.net等。
通常不同的邮箱提供商对Email的用户名有不同的限制,如用户名长度不能低于6位字符,用户名只能由数字和字母组成,不能有特殊符号,如下划线_等。这节要完成的正则表达式,将不过多考虑这些细节,本例将假设Email用户名可以含有大小写字母、阿拉伯数字、减号(-)以及下划线(_)。域名的规则也类似,但是有英文句点(.),而没有下划线。
(1)首先写出Email用户名的正则表达式,根据上述分析,可以写出Email用户的正则表达式为^[_a-zA-Z0-9-]+$,这个正则表达式的含义是:以至少一个规范字符(除了.)开头的字符串。
(2)接下来写服务器域名部分的正则表达式,这个表达式可以是[0-9a-z][0-9a-z-]+\.)+[a-z]{2,4},注意这里最后的[a-z]{2,4},它表示域名的最后一部分,通常它是.com、.cn、.info,即至少2个字符,至多4个字符,所以使用[a-z]{2,4}。
(3)最后使用@将以上两个正则表达式连起来即可,如下代码第16行所示。代码15-16是检查Email格式是否合法的完整PHP程序。
代码15-16 使用正则表达式验证Email格式是否合法15-16.php
01 <?php
02 $str_arr=array(
03 "mymail@somesite.com",
04 "my_mail@somesite.com",
05 "my-mail@somesite.com",
06 "my.mail@site.com.cn",
07 "mymail@site.com.ccoomm",
08 "mymail@site.cn",
09 "mymail@@@lsite.com",
10 "mymail@site",
11 "MyMail@somesite.com",
12 "My2007@somesite.com",
13 "163mail_for-me777@somesite.com",
14 );//定义邮箱数组
15
16 $patt_email="/^[_a-zA-Z0-9-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$/";//验证邮箱
17
18 foreach($str_arr as$str)
19 {
20 echo"字符串'$str':是";
21 if(preg_match($patt_email,$str))//匹配邮箱
22 {
23 echo"<b>合法的Email格式</b>";
24 echo"<br>";
25 echo"<br>";
26 }
27 else
28 {
29 echo"不合法的Email格式";
30 echo"<br>";
31 echo"<br>";
32 }
33 }
34 ?>
【代码解析】第2~14行首先创建了一个字符串数组$str_arr,第16行设计好验证的正则表达式,然后通过第18~33行的foreach循环来逐个检查Email。这段代码的执行结果如图15-18所示。
共有条评论 网友评论