【问题标题】:Regex email verification error - using JavaScript正则表达式电子邮件验证错误 - 使用 JavaScript
【发布时间】:2012-04-29 10:50:48
【问题描述】:
//if HTML5 input email input is not supported
if(type == 'email'){    
    if(!Modernizr.inputtypes.email){ 
         var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@([a-zA-Z0-9\-])+\.+([a-zA-Z0-9]{2,4})+$/;              
         if( !emailRegEx.test(value) ){ 
            this.focus();
            formok = false;
            errors.push(errorMessages.email + nameUC);
            return false;
        }
    }
}

这是我的 javascript 正则表达式,用于检查电子邮件格式是否正确。但是当我自己尝试时,它不会显示任何 ..@. 的错误。它最终不会检查 .com 或其他任何内容。我究竟做错了什么?

【问题讨论】:

  • 我在你的问题标题中闻到了太多的大写字母。这个正则表达式很可怕。有超过 4 个字符的 TLD,+ 在电子邮件地址的本地部分完全有效。它在 IDN 上也失败了。

标签: javascript regex email verification email-validation


【解决方案1】:

您需要使用真正适合电子邮件地址的正则表达式。您当前的地址已完全损坏,因为它不接受大量有效地址。

请参阅http://www.regular-expressions.info/email.html 以获得更详细的描述和论据,为什么正则表达式毕竟不是一个好主意。

无论如何,这可能适合您的需求:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

regular-expressions.info 对此正则表达式的评价如下:

如果我们省略使用双引号和方括号的语法,我们将获得更实用的 RFC 2822 实现。它仍将匹配当今实际使用的所有电子邮件地址的 99.99%。

【讨论】:

  • 我决定不使用正则表达式并依赖 html 5 验证电子邮件。我知道这不一致,opera 没有显示 . 错误,但邮件没有来找我。但是还是可以用的
猜你喜欢
  • 2014-05-11
  • 2011-10-27
  • 2012-01-01
  • 2015-08-07
  • 2020-11-04
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
相关资源
最近更新 更多