日期:2014-05-16  浏览次数:20461 次

再看 Email 地址验证问题
Email 地址验证问题,在前端开发经常用遇到Email地址的验证, 网上不是见到很多了吗? 如果你仔细看就会发现,
有些是验证比较简单的或者是比较理想一点的Eamil地址, 当真正实际使用时隐约发现有些合理的Email地址没有被考虑到, 导致有些合理的Email地址在JS验证时不通过, 从而提交不了表单, 
于是有必要重新用正则结合JS写一个简洁, 高效, 允许合理最大范围字符的Email地址验证函数, 因为这个功能在平时使用的频率很高, 函数如下:

JScript code

function isEmail(strEmail){
//true=legal email, false= wrong email
    var e=strEmail.replace(/^\s*|\s*$/g,'');
    var emailReg=/^[\d\w-\._]*[\d\w]{1}@[\d\w]{1}[\.\d\w-]*[\d\w]{1}\.[a-z]+$/i;
    var p=e.indexOf('@');    
    if(emailReg.test(e) && e.indexOf('..')<0 && e.indexOf('@',p+1)<0)
    return true;
    else
    return false;    
}



偶写的就这些,分享一下差不多一个上午的功夫,^_^...,如果还有更好的方法就拍砖指点一下,一起讨论...
其中的转义字符 \ 比较诡异,奋斗了蛮久

JScript code

var e1='a.s_df-123.z@163.com.cn';
//var e1="a@163.com.cn";         //应该提示合法的Email地址
//var e1="a_aa@163.com.cn";     //应该提示合法的Email地址
//var e1="1234@163.com.cn";     //应该提示合法的Email地址
//var e1="a-aa@163.com.g";      //应该提示合法的Email地址
//var e1="a-aa@c7.n";           //应该提示合法的Email地址
//var e1="a-a_a.a@163.com";     //应该提示合法的Email地址
//var e1="a#aa@.163.com";              //应该提示非法的Email地址
//var e1="a@asd_aa@.163.com";          //应该提示非法的Email地址
//var e1="aa..asd_aa@.163.com";        //应该提示非法的Email地址
//var e1="aa.a9sd_aa@163..com";        //应该提示非法的Email地址
//var e1="a%a.a9sd_aa@163.com";        //应该提示非法的Email地址
//var e1="a\xa.a9sd_aa@163.com";       //应该提示非法的Email地址
//var e1="aa.asd_aa@163.co!m";         //应该提示非法的Email地址
//var e1="a\ra.a3sd_ata@163.com";      //因 \ 为转义特殊字符,如它和其后的数字或英文字母构成的组合如果符合转义  
                                       //约定,那么在字符串赋值时已经被转义为其它字符了,再到后面的 Eamil 检测,
                                       //如果符合Eamil地址要求则提示合法 Eamil,否则提示非法 Eamil;
                                       //一般字符串里有: \数字, \b, \f, \n, \t, \r, \x 等(更多网少查找)则提示非法Eamil;
                                       //但 \m, \h等不符合转义约定,在字符串赋值时\被忽略掉, 则提示合法Eamil


//注意: 有些Email地址在理论上符合Email语法/语意要求, 但实际可能不存在, 如s@dd.x 符合Email语法要求, 但实际不存在


if(isEmail(e1))
alert('合法的Email地址');
else
alert('非法的Email地址');




------解决方案--------------------
楼主很强大
------解决方案--------------------
谢谢楼主
------解决方案--------------------
我建议楼主把所有的“{1}”都去掉,明显的多此一举。

还有把所有的“\d”都去掉,明显的多此一举。因为“\w”中就已经包括“\d”了。


不过,还是很支持楼主这种乐于分享的精神。

我也弄了一个:紧做参考

var re=/\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
------解决方案--------------------
很好,谢谢楼主的共享精神
------解决方案--------------------
探讨
刚翻书看了,是 4L 说的情况,{1}可以去掉,学习了,这样就更简短


JScript code


function isEmail(strEmail){
//true=legal email, false= wrong email
var e=strEmail.replace(/^\s*|\s*$/g,'');
var emailReg=/^……

------解决方案--------------------
用html5吧 email标签一用 一行搞定