我需要添加自定义验证规则(或一组规则)以防止整个电子邮件地址列表进行注册。这已经在运行服务器端,但我们希望前端也能模仿它。
我有大量的40或50个免费电子邮件帐户(例如Gmail,Hotmail,Live邮件等),并且需要使用列表中的一个词干验证为FALSE。
我该怎么做呢?
答案 0 :(得分:4)
如果您已经在运行服务器端,只需向服务器发出AJAX请求即可重用相同的验证逻辑。 (您的客户端代码将使XMLHttpRequest返回服务器,服务器的验证逻辑运行,并将状态返回给客户端 - 所有这些都不需要重新加载HTML页面。您已经表明您正在使用jQuery,所以这应该很容易。)
作为一个额外的好处,您的服务器端代码可以缓存检查 - 以便当服务器重复检查(可能仅在几秒钟后)进行验证而无需客户端参与(安全性所必需的,因为任何由客户端不可信任 - 想想Firebug等) - 服务器可能不需要重复其检查的全部工作。 (这可能太简单了,无法确切知道服务器端验证包含的内容。如果它包含对Web服务的任何外部调用等,则可能值得缓存。)
答案 1 :(得分:1)
使用服务器端数组生成包含相同值的jQuery数组,然后使用jQuery的.inArray()方法查找它。 http://api.jquery.com/jQuery.inArray/
例如:
$('#submit_button').click(function(event){
var emailAddress = $('#email').val();
var emailDomain = emailAddress.substr(emailAddress.search('@') + 1)
if (jQuery.inArray(emailDomain, invalidAddresses))
{
alert("Invalid Email Address");
event.preventDefault();
}
});
答案 2 :(得分:0)
为什么不对所有不需要的电子邮件进行un array。
例如。
var email = new Array('Hotmail','Gmail','Yahoo',...,'Live');
你是如何拥有所有电子邮件列表,制作数组或json文件,xml,txt,...等等
下一步。使用正则表达式创建函数handdler。
$(function()
// $('selector').event(function(){
function handdlerMail(email){
for(var i = 0; i<email.length; i++){
if(evalEmail(current_value,/^email[i]/g){
// do something
} else { // do something }
} // end for
} // End function
function evalEmail(a,b) {
if ((b.test(a))) {
return true;
} else {
return false;
}
}
}) // end of event
}) // enf of function
我认为使用权重树结构更好的方法, 即如果你可以创建一个包含的树,电子邮件不需要。
然后您可以在对数时间内评估您的电子邮件。在走树的权重结束时,你可以决定它是否在你的列表中。
即它是否在树中