我想检查用户输入是否是JavaScript的电子邮件地址,然后将其发送到服务器或试图发送电子邮件,以防止最基本的误解。


当前回答

在我的情况下,我想避免 ~ 和 # 这就是为什么我使用了另一个解决方案:

function validEmail(email){
  const regex = /^((?!\.)[\w\-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$/;
  return regex.test(email);
}

其他回答

我正在使用 match() 来检查标准电子邮件模式,并在输入文本中添加一个类,以通知用户。

$(document).ready(函数(){ $('#submit').on('click',函数(){ var email = $('#email').val(); var pat = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; if (email.match(pat)){ $('#email').addClass('input-valid'); return false; } else { $('#email').addClass('input-error').val(''); return false

一个不检查 TLD 的存在的解决方案是不完整的。

几乎所有这些问题的答案都建议使用Regex来验证电子邮件地址,我认为Regex仅适用于基本验证,似乎检查电子邮件地址的验证实际上是两个单独的问题:

电子邮件格式验证:确保电子邮件是否符合 RFC 5322 的电子邮件格式和模式,以及 TLD 是否实际存在。

例如,虽然地址 example@example.ccc 将通过 regex,但它不是有效的电子邮件,因为 ccc 不是 IANA 的顶级域名。

2、确保电子邮件实际存在:这样做,唯一的选择是向用户发送电子邮件。

我正在使用这个功能

/**
 * @param {*} email
 */
export const validateEmail = email => {
    return new RegExp(/[\w-]+@([\w-]+\.)+[\w-]+/gm).test(email);
};

如果你把你的常规表达式定义为一个字符串,那么所有的背影都必须逃脱,所以而不是“\w”你应该有“\w”。

否则,将其定义为常规表达式:

var pattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; 

你不能预测信是正确的方式,用户打算它们是 - 这是最常见的错误......错过一个字母或输入错误的字母。

最终,无论你在JavaScript中做什么,你总是需要你的备份脚本来检查电子邮件是否也成功发送,并且它可能会有一个验证过程。

所以,如果你想确保它是某种类型的电子邮件地址,而不是他们的用户名,你只需要真正检查是否有 @ 符号在那里,至少 1 点,并留下所有剩余的备份代码。

var email = 'hello@example.com'
if(email.split('@').length == 2 && email.indexOf('.') > 0){
      // The split ensures there's only 1 @
      // The indexOf ensures there's at least 1 dot.
}

最好避免阻止用户输入有效的电子邮件,而不是实施如此多的限制,以至于它变得复杂。

这只是我的观点!