0

这是原始的正则表达式

/^([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

4

2 回答 2

1

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

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

第一组后面的加号应该在括号内,加号实际上是您希望能够拒绝“@test.com”的情况 在正则表达式中,+ 表示模式必须匹配一个或多个字符,但是因为它不在您的捕获组([A-Za-z0-9_-.])中,它没有反映这一点。

您提出的添加 {1} 的“修复”意味着您的第一个组应该只匹配长度为 1 的子组,因此如果您尝试在稍微不同的情况下重新使用此模式,它将出错。

在您的第一段代码中移动括号内的加号,您应该没问题。

于 2013-04-21T16:33:02.307 回答
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 类

于 2013-04-21T16:51:08.903 回答