不,那个正则表达式不适合这个目的。看看这个(虽然我不能保证它的有效性)。
另外,关于脚本本身,你为什么不这样检查:
function checkEmailValidity(e) {
return e.match("some validating regex");
}
这似乎是一个更快、更简洁、更易读的解决方案。
编辑:
值得注意的是,几乎不可能编写一个可以检测任何有效电子邮件地址的正则表达式。因此,您最好尝试制作一些验证算法,而不是正则表达式,因为有效的电子邮件地址可能非常非常复杂。
考虑这段代码:
function validateEmail(email) {
if (typeof email != "string") return false;
email = email.split("@");
email[1] = email[1].split(".");
if (
email.length !== 2 ||
email[1].length < 2 ||
!email[1].hasValues(String)
) return false;
return true;
}
// Checks whether each key in an array has a value, and (optionally) if they match a given contructor (object type).
// I.e.: myArray.hasValues(String) // checks whether all elements in myArray has a value, a nonempty string.
Array.prototype.hasValues = function(assumedConstructor) {
for (var i = 0; i < this.length; i++) {
if (!this[i]) return false;
if (assumedConstructor && this[i].constructor != assumedConstructor) return false;
}
return true;
};
它是这样工作的:
- 首先检查字符串是否包含一个
@
,并且只有一个
- 检查 之后的部分
@
是否至少有一个.
.
检查每个可能的 '之间是否有一些字符。
伪造一个虚假的电子邮件地址仍然很容易,但通过这种方式,我们可以确保它至少以某种方式正确格式化。我能想到的唯一问题是@
' 内部注释,根据 RFC,这应该是完全合法的,但这段代码会将其视为错误。
拥有正常电子邮件地址的普通互联网用户不会失败。所以它到底有多重要由你来决定;)
最好的解决方案(如果有的话)是将地址放入某种内置方法中,该方法通过尝试使用电子邮件地址以某种方式检查有效性。