我想创建电子邮件验证或验证,您需要输入有效地址,但不需要发送验证码来验证电子邮件地址是否有效,或者不仅仅是显示“无效电子邮件”或其他内容的警报。
我尝试过 verifalia,我想要该实现,但它不是免费的。
如果您问这个问题,您需要区分实际电子邮件地址验证和检查地址是否可信。
什么是电子邮件地址验证?
验证是检查电子邮件地址是否确实存在以及声称有权访问该地址的人是否确实存在的过程。 您只能使用验证码或必须打开验证链接的用户才能真正做到这一点。
您可以尝试向该地址发送一封电子邮件,并检查该电子邮件是否收到 200 状态代码或 404 状态代码。这样您就可以检查电子邮件地址是否指向当前可访问的邮件服务器。但是,您无法验证服务器当前是否由于错误或维护而处于离线状态,也无法检查用户是否有权访问该邮件。这意味着,从技术上讲,它并没有得到充分的验证。
检查合理性意味着您检查电子邮件地址在技术上是否可行。它不会检查该电子邮件地址是否确实存在,也不会检查用户是否可以访问它。这种看似合理的检查可以使用正则表达式来完成:RFC 5322。
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
像 Verifalia 这样的服务实际上并不进行电子邮件验证,而是通过向服务器发送测试邮件并等待 HTTP 响应代码来检查它们是否可以到达服务器。其他服务甚至不会这样做,而只是使用 RFC5322 正则表达式来检查合理性。
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(String(email).toLowerCase());
}
var email = prompt("Please enter your email:");
if (!validateEmail(email)) {
alert("Invalid email");
}
所需模式=“[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$
之后添加一个提交按钮。您也可以在脚本中编写验证函数。
function validateEmail() {
var emailInput = document.getElementById('email');
var isValid = emailInput.checkValidity();
if (!isValid) {
alert('Invalid email');
return false;
}
return true;
}