用Javascript正则表达式验证Email地址

作者:sofish 来源:幸福收藏夹 时间:2009-12-09 15:56:00 

白天总是玩着不看书,这两晚却很神奇地因为睡不着起来看书,正则表达式。很好玩的东西。《Javascript 高级程序设计》是本好书,写得很系统。不过,在正则表达式那一章,看到验证电子邮件那里,似乎把正式表达式给写错了,也被我不小心发现了。


原代码是这样的:

function isValidMail(sText){ var reMail = /^(?:\w+\.?)*\w+@(?:\w+\.?)*\w+$/; return reMail.test(sText);}

似乎这样验证像sofish@163.com这样的邮箱是没问题的。但,由于仔细看一下在AT(@)后面的非捕获性引用中,使用的是*(出现任意次):

var reMail = /^(?:\w+\.?)*\w+@(?:\w+\.?)*\w+$/;

那么,也包括出现0次,这样的话。像sofish@163com这样的邮箱也是通过验证的。 显然,"."是必须至少出现一次的,因此,而"+"才表示至少出现一次。但这里,在AT后面,我们可以写像163.com.cn这样的结尾,但直接改成"+"的话,这样163..com.cn也可以通过验证。下面是我的方法:

function isValidMail(sText) { var reMail = /^(?:\w+\.?)*\w+@(?:\w+\.)+\w+$/; alert(reMail.test(sText))}

规定"."号只出现一次。然后在非捕获引用后面,让其他至少显示1次,再以任意的字符结束。不过,这里的"\w"是包括下划线的,也就是说,像 sofish@163_.com_这样的邮件也是可能通过难的,显然,这是一个不合法的邮件,在AT后面的"."号后前,是不可以出现下划线的,而后面,只能是英文字母的(至少目前我没有见过用后面是数字的域名)。并且,这里应该注意到的是,"\w"所代表的字符包括下划线,不用缩写是这样的:

[a-zA-Z_0-9]

因此,上面的代码可以这样进行改装:

function isValidMail(sText) { var reMail = /^(?:[a-z\d]+[_\-\+\.]?)*[a-z\d]+@(?:([a-z\d]+\-?)*[a-z\d]+\.)+([a-z]{2,})+$/i; alert(reMail.test(sText))}

其实,通常这样写就可以了,对吧。要更深入,还可以考虑AT后面的各个点后面,不应该用相同的字母,比如.com.cn.com.cn(很显然,这样的域名还是有的,我错了,感谢@StonyWang同学的提醒,真的有人这么囧这样做么?)这样是不被请允许的。可以考虑一下利用捕获性引用进行储存,并进行比较验证。当做一道练习题吧(突然感觉好像在学高中的数学题)。

标签:验证,JavaScript,正则表达式,email
0
投稿

猜你喜欢

  • ASP中3种分页显示的性能比较

    2007-08-15 13:37:00
  • 网站导航设计的6大分类

    2010-07-12 18:46:00
  • ASP实现多域名同一空间的处理实例

    2008-10-29 09:46:00
  • XML DOM介绍和例子

    2007-10-15 20:23:00
  • 设计高效的faq页面

    2011-06-10 13:13:00
  • ASP中的全角和半角之间的转化

    2008-06-06 13:34:00
  • ASP+FSO+框架实现ASP生成htm并分页的方法(批量)

    2009-03-09 18:26:00
  • 多个域名后缀同时查询的域名查询系统代码

    2008-05-20 11:53:00
  • 在select语句中使用top的一些小技巧

    2009-03-12 12:21:00
  • phpmyadmin 数据导入导出问题

    2007-08-06 15:23:00
  • asp连接mssql2005的代码

    2011-03-29 11:11:00
  • ajax xmlhttp getResponseHeader实例教程

    2009-02-04 10:46:00
  • JS代码混淆加密工具

    2008-05-25 13:49:00
  • SQL触发器实例讲解

    2012-04-13 11:52:48
  • Oracle捕获问题SQL解决CPU过渡消耗

    2010-07-21 13:14:00
  • 14条最佳JS代码编写技巧[译]

    2009-11-09 19:37:00
  • jQuery入门之–属性(一)

    2009-07-12 15:29:00
  • T-SQL 查询语句的执行顺序解析

    2011-11-03 17:04:06
  • 设置密码保护的SqlServer数据库备份文件与恢复文件的方法

    2011-11-03 16:55:30
  • CSS实现完美垂直居中

    2007-09-22 09:29:00
  • asp之家 网络编程 m.aspxhome.com