正则表达式电子邮件验证错误 - 使用JavaScript

问题描述:

//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或任何最终。我究竟做错了什么?正则表达式电子邮件验证错误 - 使用JavaScript

+5

我在你的问题标题中闻到了太多的大写字母。这个正则表达式很糟糕。有超过4个字符的TLD,'+'在电子邮件地址的本地部分是完全有效的。它也在IDN上失败。 – ThiefMaster 2012-04-29 10:51:56

您需要使用真正适合电子邮件地址的正则表达式。由于有大量有效地址不能接受,因此您当前的地址已被彻底破坏。

请参阅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%。

+0

我决定不使用正则表达式,并依靠HTML 5验证电子邮件。这是不一致的,我知道,歌剧显示*。*没有错误,但邮件不会给我。但仍然可用 – showbiz 2012-04-29 11:36:50