在运行剩余的 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 之前检查有效的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章