如何验证JavaScript中的电子邮件地址?

如何在JavaScript中验证电子邮件地址?


使用正则表达式可能是最好的方法。 你可以在这里看到一堆测试(从铬中获得)

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());
}

以下是接受unicode的常规表达式示例:

var re = /^(([^<>()[].,;:s@"]+(.[^<>()[].,;:s@"]+)*)|(".+"))@(([^<>()[].,;:s@"]+.)+[^<>()[].,;:s@"]{2,})$/i;

但请记住,不应只依赖JavaScript验证。 JavaScript可以很容易地被禁用。 这应该在服务器端进行验证。

以下是上述实例的示例:

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);
}

function validate() {
  var $result = $("#result");
  var email = $("#email").val();
  $result.text("");

  if (validateEmail(email)) {
    $result.text(email + " is valid :)");
    $result.css("color", "green");
  } else {
    $result.text(email + " is not valid :(");
    $result.css("color", "red");
  }
  return false;
}

$("#validate").bind("click", validate);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form>
  <p>Enter an email address:</p>
  <input id='email'>
  <button type='submit' id='validate'>Validate!</button>
</form>

<h2 id='result'></h2>

只是为了完整性,在这里你有另一个符合RFC 2822的正则表达式

官方标准被称为RFC 2822.它描述了有效电子邮件地址必须遵守的语法。 你可以( 但你不应该 - 阅读)用这个正则表达式来实现它:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-x7f]|[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[x01-x08x0bx0cx0e-x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])

(...)如果我们省略使用双引号和方括号的语法,我们会得到更实际的RFC 2822实现。 它仍然会匹配今天实际使用的所有电子邮件地址的99.99%。

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

您可以做出的进一步更改是允许任何双字母国家代码顶级域名,并且只允许特定的通用顶级域名。 这个正则表达式会过滤诸如asdf@adsf.adsf虚拟电子邮件地址随着新的顶级域名的添加,将需要更新它

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+(?:[AZ]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)b

因此,即使遵循官方标准,仍然有待取舍。 不要盲目复制在线图书馆或论坛的正则表达式。 始终在您自己的数据和您自己的应用程序上测试它们。

强调我的


我已经稍微修改了Jaymon的答案,用于那些希望以下列形式进行简单验证的人:

anystring@anystring.anystring

正则表达式:

/S+@S+.S+/

JavaScript函数示例:

function validateEmail(email) 
{
    var re = /S+@S+.S+/;
    return re.test(email);
}
链接地址: http://www.djcxy.com/p/325.html

上一篇: How to validate an email address in JavaScript?

下一篇: How do I remove a submodule?