【问题标题】:Validate Email Using "Hidden Form"?使用“隐藏表单”验证电子邮件?
【发布时间】:2016-03-31 21:16:31
【问题描述】:

我想使用 HTML5 的 type="email" 验证来创建一个用于验证电子邮件的函数。

如果可能的话,我想做的是创建一个表单,并附加一个type="email" 的输入,以便我可以尝试提交它。然后我可以看看它是否有效返回是否传递的电子邮件实际上是一封电子邮件。

类似这样,但我知道这不起作用:

function isEmail (string) {
    var frm   = document.createElement('form');
    var input = document.createElement('input');

    input.setAttribute('type', 'email');
    input.setAttribute('action', 'javascript:void(0)');
    input.setAttribute('value', string);

    frm.appendChild(input);

    // I know this doesn't work
    if ( !! frm.submit() ) return true;
    else return false;
}

是否可以通过这种方式验证电子邮件地址?

【问题讨论】:

  • 一般免责声明:电子邮件地址的语法有效性并不意味着该电子邮件地址确实存在。所以不要试图过火。您要做的就是抓住用户的拼写错误,实际验证需要一封带有链接或密码之类的电子邮件。
  • 当然,我只是想确保传递的电子邮件在语法上是正确的。
  • 关于“语法正确性”,请参阅我发布的第二个链接下的注释:“此要求是对 RFC 5322 的故意违反,它定义了电子邮件的语法同时过于严格(在“@”字符之前)、过于模糊(在“@”字符之后)和过于宽松(允许以大多数用户不熟悉的方式使用 cmets、空白字符和引用字符串)的地址不实用在这里使用。” - 所以关于什么构成“有效”电子邮件地址的定义已经有所不同,具体取决于您询问的对象。通常建议检查不那么严格。
  • 除了上面 CBroe 的评论,您还应该非常谨慎地了解“电子邮件地址”一词的含义。您可能会对这可以引用的不同事物的数量感到惊讶。

标签: javascript validation email


【解决方案1】:

正如https://www.w3.org/TR/html5/forms.html#e-mail-state-(type=email) 所说,

用户代理可能允许用户将值设置为不是有效电子邮件地址的字符串

所以我可能宁愿不依赖它。

另外,https://www.w3.org/TR/html5/forms.html#valid-e-mail-address 有一个(JS 兼容的)正则表达式,它执行相同的检查,就像浏览器在验证电子邮件输入字段时应该做的那样——所以我可能只是使用它。


但是,如果您坚持为此使用表单域——HTML5 还提供了一个 API 来检查表单域是否有效,请参阅https://www.w3.org/TR/html5/forms.html#the-constraint-validation-api——因此无需实际提交表单。

我没有检查输入 type=email 的浏览器兼容性——但是使用正则表达式解决方案,您将拥有应该在每个浏览器中都可以使用的东西,而如果您依赖 HTML5,它可能会在一些尚未赶上的浏览器中失败。

【讨论】:

  • 我喜欢这个答案,我会在我的产品中使用这个正则表达式。不过,我仍然对我的粗体问题感到好奇:尽管不推荐,我正在尝试做什么可能
  • 查看我的编辑 - HTML5 还指定了一个 API 来检查表单字段的有效性。
  • 是的,刚看到。等待几分钟,以便我标记为正确
猜你喜欢
  • 1970-01-01
  • 2011-05-27
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2018-08-17
  • 2019-03-27
  • 1970-01-01
相关资源
最近更新 更多