首页 文章

Stack Overflow自己的电子邮件验证正则表达式有多好? [重复]

提问于
浏览
2

可能重复:验证电子邮件地址的最佳正则表达式是什么?

我在Stack Overflow自己的答案页面代码中找到了这个电子邮件验证正则表达式 . 它有效/有效吗?

function saveEmailNotification(email) {
    // only post if the email is valid
    if (!(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(email)) return;
...
}

3 回答

  • 2

    无需重新发明轮子 . 从jQuery验证(参见http://bassistance.de/jquery-plugins/jquery-plugin-validation/):

    function validateEmail(value){return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);}
    
  • 3
    /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
    

    ^ 表示字符串的开头

    [A-Z0-9._%+-]+ 表示:这些字符中的一个或多个

    @ 意味着@应该来了

    [A-Z0-9.-]+ 表示:这些字符中的一个或多个

    \. 表示a . 应该来吧

    [A-Z]{2,4} 表示:2,3或4个字母

    $ 表示字符串结尾

    i 是一个标志,表示它同时接受小写和大写 .

  • 1

    你真的应该使用符合RFC-822标准的regexp - http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

相关问题