0

使用 JSLint 我无法让我的 isEmailValid 工作,代码有什么问题?我收到不同的错误消息,例如 local 在使用之前未定义或 @ 无效字符或 ^ 未包含但对于电子邮件它可能有符号“^”?

function isEmailValid(email) {
"use strict";
var e = (email.split("@"), local = /[^\w.!#$%&*+-\/=?^_{|}~]/, domain = /[^\w.-]/);
if (e.length !== 2) {
    return false;
}
if (local.test(e[0])) {
    return false;
}
if (e[0].length > 253) {
    return false;
}
if ((e[0][0] === ".") || (/\.\./.test(e[0]))) {
    return false;
}
if (domain.test(e[1])) {
    return false;
}
if (e[1].length > 253) {
    return false;
}
if (e[1][0] === "." || /\.\./.test(e[1]) || e[1][e[1].length - 1] === ".") {
    return false;
}
return true;
    }
4

3 回答 3

1

使用此正则表达式在客户端验证电子邮件地址:

/.@./

然后通过向该地址发送电子邮件来进行真正的服务器端验证。

不符合任何规范的工作电子邮件地址可以并且确实存在。限制用户是没有意义的,因为他们的有效电子邮件地址看起来错误,同时允许用户输入看起来正确但虚假的电子邮件地址(例如,iwontgiveyoumyrealemailaddress@noreply.com在计算机上看起来是真实的,但可能不是)。

必读

于 2012-10-19T21:45:16.213 回答
0

您收到错误是local因为您实际上并未将其声明为函数中的局部变量。

var语句不包含或使用括号。因此,无论如何都将它们用作:

var e = (email.split("@"), local = /[^\w.!#$%&*+-\/=?^_{|}~]/, domain = /[^\w.-]/);

相当于:

local = /[^\w.!#$%&*+-\/=?^_{|}~]/;
domain = /[^\w.-]/;
var e = (email.split("@"), local, domain);

e然后将被设置为被评估的括号的结果,它只包含逗号操作符的操作数。所以,最后一行相当于:

email.split("@");
local;
var e = domain;

而且,由于这似乎不是您想要的,您可能不想要括号:

var e = email.split("@"), local = /[^\w.!#$%&*+-\/=?^_{|}~]/, domain = /[^\w.-]/;
于 2012-10-17T19:32:55.487 回答
0

我建议使用正则表达式:

function validateEmail(email) { 
   var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
   return re.test(email);
} 

另请参阅:在 JavaScript 中验证电子邮件地址?

于 2012-10-17T18:49:34.047 回答