用PHP刚写了个验证E-mail地址的正则表达式

0 views
Skip to first unread message

陈立强

unread,
May 21, 2005, 10:49:11 AM5/21/05
to Google-Group-学习日志

刚刚准备写一个用户注册的程序,就想到了经典的E-mail地址验证,由于没太大把握,且原来只看过一遍正则表达式的内容,于是就边翻书边写着,弄了个近个小时才写了出来(菜鸟的经典效率):

  Quote:
<form name="form1" method="post" action="">
  <input type="submit" name="Submit" value="提交">
  <input name="email" type="text" id="email">
</form>
<?php

echo $email.":";
          $pattern = '^[a-zA-Z][a-zA-Z0-9]{2,}@{1}[a-zA-Z0-9]{3,}\.{1}[a-zA-Z]{2,5}$';
        if(!eregi($pattern,$email)){
                echo "是不合法的,请输入正确的E-mail地址!";
        }else{
                echo "是合法的!";
        }

?>

下面是对表达式的详解:

if后面的内容就是判断$email(表单提交来的)的内容是否符合$pattern所规定的,如果不符合返回假,就输出不合法提示。。。。

所以了,这里关键是要写好$pattern的内容了。

首先判断用户名
^[a-zA-Z] 表示是否是字母开头(一般邮箱用户名只允许英文字母开头的。
[a-zA-Z0-9]{2,} 表示第二字符开始是字母或数字且至少出现两次以上(同理邮箱用户名一般要3个字符以上)。

接着判断是否有邮箱的@标志,这个最简单了,直接弄个@标志在用户名后面,但是一般这个标志只出现一个,所以用{1}来限制

再接下来判断域名了
[a-zA-Z0-9]{3,} 表示由字母和数字组成的字符串出现3次以上(因为我发现我注册域名时要求我要至少三个字符,所以猜测没有三个字符的域名

再判断域名后的"."
没错,就是那个\.{1}

最后判断域名后缀(LABEL:写到这,发现我这个表达式问题不小,下面会讲到)
[a-zA-Z]{2,5}$ 表示字母重复出现2到5次以上(还没见到只有一个后缀的顶级域名,至于长度,本人最长只见过info为四个,5是为了防止我孤陋寡闻而设的。)最后的$表示,这个字符串是出现在尾部的(总感觉有点多余的,但是书上有提到这个符号,不好好利用总会觉得自己水平差了一截,就蛮放进去湊个热闹)。

这里似乎对一个E-mail地址判断得很完整了。LABEL: {但是发现.com.cn这类域名判断出现非法的提示,现在只有继续想去了。}还有一个问题就是部分邮箱用户名是允许出现"."的(如中华网),但是并没有进行表达式中并没有对其进行匹配。

什么//本来想写什么大家猜吧,反正写到这儿,发现LABEL:处提到的一个问题解决了,那就是最后的\.[a-zA-Z\.]{2,5}重新匹配一下(写到这,又刚刚发现我真的很粗心(因为解决了.com.cn的问题,却忽略了.com的问题了),于是就改进了一下。最后在点号后面添加了个*做匹配符,但是似乎验证的严格性降低了。继续想去。
Google-Group-学习日志
 

Attr_22484390182.gif
Attr_22484390112.gif

Chen Liqiang

unread,
May 21, 2005, 2:23:43 PM5/21/05
to stud...@googlegroups.com
理性了表达式的内容了

$pattern =
'^[a-zA-Z]([a-zA-Z0-9_-]){2,}@{1}([a-zA-Z0-9_-]){3,}(\.[a-zA-Z0-9_-]{2,5})+';

Reply all
Reply to author
Forward
0 new messages