在运行剩余的 javascript 之前检查有效的电子邮件

Posted

技术标签:

【中文标题】在运行剩余的 javascript 之前检查有效的电子邮件【英文标题】:Check for valid email before running remaining javascript 【发布时间】:2011-09-25 21:01:02 【问题描述】:

我有一个文本框,用户需要在其中插入有效的电子邮件地址。

当用户提交有效的电子邮件地址时,会在回发数据时显示加载图形。

下面的代码可以很好地显示加载图形,但它不会首先检查电子邮件地址是否有效。有人可以帮忙吗?

$('#btnEmail1Submit').live ("click", function() 
   $('<div class="submitBg"></div>').appendTo(".emailEditContainer");
   $('<div class="submitLoadingCont"><img class="submitLoading" src="images/mypreferences/loading.gif"   /></div>').appendTo(".emailEditContainer");
);

我认为我需要在单击时运行的函数周围放置一个 if 语句 - 类似于:

$('#btnEmail1Submit').live ("click", function() 
  if(emailvalid == true)    
    $('<div class="submitBg"></div>').appendTo(".emailEditContainer");
    $('<div class="submitLoadingCont"><img class="submitLoading" src="images/mypreferences/loading.gif"   /></div>').appendTo(".emailEditContainer");
  
);

我正在使用 asp.net 电子邮件验证 - 它看起来像这样:

<asp:RegularExpressionValidator Display="Dynamic" ValidationGroup="PrimarySubmit" ID="RegularExpressionValidator1" runat="server" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail1" ErrorMessage="Invalid email address - " />

【问题讨论】:

请停止在标题中写标签。 您尚未向我们展示您如何执行电子邮件地址验证。 您是否要求我们为您编写电子邮件验证? 您需要使用正则表达式验证电子邮件地址。在调用 appendTo 函数之前执行此操作。 【参考方案1】:

您需要使用正则表达式来测试电子邮件地址的有效性:

function isValidEmailAddress(emailAddress) 
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]0,66)\.([a-z]2,6(?:\.[a-z]2)?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]2\.|[0-9]1,2\.))((25[0-5]|2[0-4][0-9]|1[0-9]2|[0-9]1,2)\.)2(25[0-5]|2[0-4][0-9]|1[0-9]2|[0-9]1,2)\]?$)/i);
    return pattern.test(emailAddress);
;

来自this question,请查看该帖子了解更多信息。

您需要使用用户提供的电子邮件地址调用该函数,所以我假设如下:

var email = $("#emailInput").val();
if(isValidEmailAddress(email)) 
    //Do stuff

【讨论】:

【参考方案2】:

您应该使用正则表达式检查电子邮件的有效性

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,))$/

$('#btnEmail1Submit').live ("click", function() 
   if(!email.match(re)) 
     alert('invalid email');
     return false;
   
   $('<div class="submitBg"></div>').appendTo(".emailEditContainer");
   $('<div class="submitLoadingCont"><img class="submitLoading" src="images/mypreferences/loading.gif"   />    </div>').appendTo(".emailEditContainer");
);

正则表达式来自Validate email address in javascript?

【讨论】:

谢谢...我认为在寻求帮助之前我的方向是正确的 - 只需要让 if 语句正确。 if(!email.match(re)) 不起作用,因为如果它没有找到它,它会返回null。所以应该是email.match(re) !== null【参考方案3】:

电子邮件验证已在 SO 和 elsewhere 上讨论过 many, many times。简而言之,很难(不可能)做到完美,并且是在最大化有效格式覆盖率和最小化误报之间进行权衡。事实上,我验证电子邮件地址所做的只是进行基本的健全性检查。在伪代码中:

if (address.contains("@"))  
   .. // then ok
 

其他任何事情基本上都是徒劳的。即使您花费数年时间构建一些极其复杂的正则表达式以符合RFC822 以获得大多数 有效地址(有不符合 RFC 的真实地址) - 您实际上是如何知道这个收件箱的存在吗?

【讨论】:

我知道你在说什么,理查德完全同意。这个检查主要是为了试图消除用户可能打错字的机会。这并不是那么关键。 对于像我这样寻求contains 方法的人来说,它不是原生的,您必须手动定义它,如下所述:***.com/a/1978419/1005455。【参考方案4】:

你可以检查一下

function myClick() 
    Page_ClientValidate();
    if (Page_IsValid) 
        return true;
    
    else 
        return false;
    

如果您使用的是正则表达式验证器,那么可以使用它......

【讨论】:

【参考方案5】:

如果您需要执行 aps 验证器来验证电子邮件地址,这似乎与您的问题有关,那么您需要在拨打电话之前调用生成的 javascript - 所以请致电:

如果(Page_ClientValidate)

做你的其他事情

但是,这将运行所有页面验证,而不仅仅是电子邮件。

如果您只需要为此运行一个验证调用,您可以查看页面上生成的 javascript,并找到它在哪里调用您的电子邮件验证,然后调用它。但是,我不建议这样做,因为它可能会在重新生成页面时发生变化。

见CodeProject

【讨论】:

以上是关于在运行剩余的 javascript 之前检查有效的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

以下代码有效吗? [关闭]

如何在CentOS中添加Swap

JavaScript 检查时区名称是不是有效

在javascript中检查日期是不是有效[重复]

JavaScript基础

使用 Phonegap,我如何检查剩余的可用磁盘空间?