这是原始正则表达式
/^([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
答案 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。