JavaScript中的电子邮件验证

Email verification in JavaScript

本文关键字:验证 电子邮件 JavaScript      更新时间:2023-09-26

我必须实现电子邮件验证,这样电子邮件地址就不能以句点开头或结尾。

代码如下:

function validateEmail(elementValue)
{
   var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+'.[a-zA-Z]{2,4}$/;
   return emailPattern.test(elementValue);
}

为了确保它不会以句点/句点/小数点开头,您可以进行的最简单的JavaScript兼容更改是在表达式的开头使用负前瞻,如:(?!'.)

function validateEmail(elementValue)
{
   var emailPattern = /^(?!'.)[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+'.[a-zA-Z]{2,4}$/;
   return emailPattern.test(elementValue);
}

有很多情况无法处理,根据您的原因,这可能是创建一个完美的符合RFC-2822标准的电子邮件地址所需要的数千件事情之一(我不认为这在任何商业上可行的系统中或"野外"中真的存在(,您真的不需要担心。

您还可以通过使其不区分大小写来进一步简化它:

/(?!'.)[a-z0-9._-]+@[a-z0-9.-]+'.[a-z]{2,4}/i

甚至更好。。。

/(?!'.)['w.-]+@[a-z0-9.-]+'.[a-z]{2,4}/i

并且您可能需要考虑(如果您还没有考虑的话(.travel.museum TLD,它们将因{2,4}长度限制而无效

var emailAddressPattern=/((''s*([^''x00-''x1F''x7F((<>[]:;@'',。"''s]+(.[^''x00-''x1F''x7F((<>[]:;@'',."''s]+((''s(|(''s*"(([^''"](|(''([^''x0A''x0D](((+"''s*((''@((''s*([^#x00-''x4F''x7F,。"''s]+((''s(|(''s*[(''s*(([^[]''](|(''([^''x0A''x0D]((+(''s]''s*((/;

您必须在正则表达式中定义:

var emailPattern = /^[a-z0-9_-][a-z0-9._-]*@[a-z0-9.-]+'.[a-z]{2,4}$/i;

[a-z0-9_-]表示:集合a-z0-9_-的1个字符(因此不是点(。我还将+更改为*,因为[a-z0-9_-]现在已经占了至少一个字符。

您的regexp已经指出它不应该以句点结尾,因为您需要在末尾有2到4个字母。

如果i标志位于最后一个/之后,则可以消除a-zA-Z,只使用a-z(或A-Z(,因为它的意思是"不区分大小写"。

请注意,验证电子邮件地址是出了名的困难。如果你试着自己去做,你几乎肯定会犯错——也就是说太严格了。你读过RFC吗?

这里有更多信息:

  • 比较电子邮件地址验证正则表达式

该页面将许多正则表达式与几个输入进行比较,其中包括两个直接满足您需求的表达式:

  • .local-starts-with-dot@sld.com
  • local-ends-with-dot.@sld.com

更多阅读:

  • http://www.regular-expressions.info/email.html
  • http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx

电子邮件地址的RFC为电子邮件地址提供了很大的空间,包括使用的字符和电子邮件地址的长度。用于几乎所有应用程序的实际用途:

  1. 电子邮件字段的列长度是固定的
  2. 字符集固定在数据库端

因此,对于所有使用标准正则表达式验证电子邮件地址的真实应用程序来说,应该是可以的,除非你是政府,你有法律义务支持有效的电子邮件地址。

任何使用符合RFC的真实世界用户的电子邮件地址都将面临足够多次的挑战,并将更改它。

<input type='text' id='emailInput'/>
<input type='submit' name='submit' onclick='Javascript:validateEmail();'/>
<script language="javascript">
function validateEmail() {
    var email = document.getElementById('emailInput');
    var filter = /^([a-zA-Z0-9_'.'-])+'@(([a-zA-Z0-9'-])+'.)+([a-zA-Z0-9]{2,4})+$/;
    if (!filter.test(email.value)) {
    alert('Please provide a valid email address');
    email.focus;
    return false;
 }
}</script>