用于电子邮件的Javascript正则表达式

时间:2013-04-21 16:16:14

标签: javascript regex

这是原始正则表达式

/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/

这将正确验证电子邮件,但如果我输入@test.com,则也允许。我添加了{1}

/^([A-Za-z0-9_\-\.]{1})+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/

我在gskinner.com进行了测试并且工作正常。它不允许@ test.com。

但是在我的网站上,它仍然无效。它仍然允许@test.com

2 个答案:

答案 0 :(得分:1)

所以,看起来你的正则表达式存在一些问题。

/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/

第一组之后的加号应该在括号内,并且加号实际上是你想要能够拒绝“@ test.com”的情况。在正则表达式中+表示模式必须匹配一个或多个字符,但由于它不在您的捕获组中[[A-Za-z0-9_-。]),因此它没有反映出来。

添加{1}时提议的“修复”意味着您的第一个组应仅匹配长度为1的子组,因此如果您尝试重新使用此模式稍有不同,则会出错例。

在第一段代码中移动parens中的加号,你应该没问题。

答案 1 :(得分:0)

Google验证电子邮件的正则表达式将覆盖99%的用例:

/**
 * Checks if the provided string is a valid address spec (local@domain.com).
 * @param {string} str The email address to check.
 * @return {boolean} Whether the provided string is a valid address spec.
 */
goog.format.EmailAddress.isValidAddrSpec = function(str) {
  // This is a fairly naive implementation, but it covers 99% of use cases.
  // For more details, see http://en.wikipedia.org/wiki/Email_address#Syntax
  // TODO(mariakhomenko): we should also be handling i18n domain names as per
  // http://en.wikipedia.org/wiki/Internationalized_domain_name
  var filter =
      /^[+a-zA-Z0-9_.!#$%&'*\/=?^`{|}~-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9]{2,6}$/;
  return filter.test(str);
};

来自Google关闭库的goog.format.EmailAddress class