Email 地址验证问题,在前端开发经常用遇到Email地址的验证, 网上不是见到很多了吗? 如果你仔细看就会发现,
有些是验证比较简单的或者是比较理想一点的Eamil地址, 当真正实际使用时隐约发现有些合理的Email地址没有被考虑到, 导致有些合理的Email地址在JS验证时不通过, 从而提交不了表单, 
于是有必要重新用正则结合JS写一个简洁, 高效, 允许合理最大范围字符的Email地址验证函数, 因为这个功能在平时使用的频率很高, 函数如下:
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;
}
偶写的就这些,分享一下差不多一个上午的功夫,^_^...,如果还有更好的方法就拍砖指点一下,一起讨论...
其中的转义字符 \ 比较诡异,奋斗了蛮久
var e1='[email protected]';
//var e1="[email protected]";      //应该提示合法的Email地址
//var e1="[email protected]";     //应该提示合法的Email地址
//var e1="[email protected]";     //应该提示合法的Email地址
//var e1="[email protected]";      //应该提示合法的Email地址
//var e1="[email protected]";           //应该提示合法的Email地址
//var e1="[email protected]";     //应该提示合法的Email地址
//var e1="a#[email protected]";              //应该提示非法的Email地址
//var e1="a@[email protected]";          //应该提示非法的Email地址
//var e1="[email protected]";        //应该提示非法的Email地址
//var e1="[email protected]";        //应该提示非法的Email地址
//var e1="a%[email protected]";        //应该提示非法的Email地址
//var e1="a\[email protected]";       //应该提示非法的Email地址
//var e1="[email protected]!m";         //应该提示非法的Email地址
//var e1="a\[email protected]";      //因 \ 为转义特殊字符,如它和其后的数字或英文字母构成的组合如果符合转义  
                                       //约定,那么在字符串赋值时已经被转义为其它字符了,再到后面的 Eamil 检测,
                                       //如果符合Eamil地址要求则提示合法 Eamil,否则提示非法 Eamil;
                                       //一般字符串里有: \数字, \b, \f, \n, \t, \r, \x 等(更多网少查找)则提示非法Eamil;
                                       //但 \m, \h等不符合转义约定,在字符串赋值时\被忽略掉, 则提示合法Eamil
//注意: 有些Email地址在理论上符合Email语法/语意要求, 但实际可能不存在, 如[email protected] 符合Email语法要求, 但实际不存在
if(isEmail(e1))
alert('合法的Email地址');
else
alert('非法的Email地址');

解决方案 »

  1.   

    我建议楼主把所有的“{1}”都去掉,明显的多此一举。还有把所有的“\d”都去掉,明显的多此一举。因为“\w”中就已经包括“\d”了。
    不过,还是很支持楼主这种乐于分享的精神。我也弄了一个:紧做参考var re=/\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
      

  2.   


    \w 已经包含了 \d 
    对,这个我不注意看....修改如下
    function isEmail(strEmail){
    //true=legal email, false= wrong email
    var e=strEmail.replace(/^\s*|\s*$/g,'');
    var emailReg=/^[\w-\._]*[\w]{1}@[\w]{1}[\.\w-]*[\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;
    }
    对于{1} 这个我不够清楚,我本意是指定仅仅匹配一次,如果省去,那匹配的是[]内部至少一个字符吧? 是这样那就可以省去了,等大牛们来指点,下面是省去{1}的情况function isEmail(strEmail){
    //true=legal email, false= wrong email
    var e=strEmail.replace(/^\s*|\s*$/g,'');
    var emailReg=/^[\w-\._]*[\w]@[\w][\.\w-]*[\w]\.[a-z]+$/i;
    var p=e.indexOf('@');
    if(emailReg.test(e) && e.indexOf('..')<0 && e.indexOf('@',p+1)<0)
    return true;
    else
    return false;
    }
      

  3.   

    刚翻书看了,是 4L 说的情况,{1}可以去掉,学习了,这样就更简短
    function isEmail(strEmail){
    //true=legal email, false= wrong email
    var e=strEmail.replace(/^\s*|\s*$/g,'');
    var emailReg=/^[\w-\._]*[\w]@[\w][\.\w-]*[\w]\.[a-z]+$/i;
    var p=e.indexOf('@');
    if(emailReg.test(e) && e.indexOf('..')<0 && e.indexOf('@',p+1)<0)
    return true;
    else
    return false;
    }
      

  4.   


    我还有个问题。一般的email验证应该是区分大小写的吧。像用户名等都应该是区分大小写的。我再建议楼主把“i”去掉。
      

  5.   

    用html5吧 email标签一用 一行搞定