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

时间:2011-06-30 10:24:15

标签: javascript jquery validation email-validation

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

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

以下代码适用于显示加载图形,但不会先检查电子邮件地址是否有效。任何人都可以帮忙吗?

$('#btnEmail1Submit').live ("click", function() {
   $('<div class="submitBg"></div>').appendTo(".emailEditContainer");
   $('<div class="submitLoadingCont"><img class="submitLoading" src="images/mypreferences/loading.gif" width="50" height="50" /></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" width="50" height="50" /></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 - " />

5 个答案:

答案 0 :(得分:14)

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

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
}

答案 1 :(得分:7)

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

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" width="50" height="50" />    </div>').appendTo(".emailEditContainer");
});

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

答案 2 :(得分:3)

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

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

其他任何事情都是徒劳的。即使你花了很多年的时间构建一些非常复杂的正则表达式来遵守RFC822来获取大多数有效地址(有些地址不符合RFC) - 你怎么知道这个收件箱真的存在吗?

答案 3 :(得分:0)

你可以查看这个

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

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

答案 4 :(得分:0)

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

  

如果(Page_ClientValidate)

     

做你的其他事情

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

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

请参阅CodeProject