【问题标题】:jQuery Validate, need to prevent free email addresses (e.g. Gmail, Hotmail)jQuery Validate,需要阻止免费的电子邮件地址(例如 Gmail、Hotmail)
【发布时间】:2012-02-10 15:57:08
【问题描述】:

我需要添加一个自定义验证规则(或一组规则)以防止整个电子邮件地址列表注册。这已经在服务器端运行,但我们希望前端也能模仿它。

我有大量 40 或 50 个免费电子邮件帐户(例如 Gmail、Hotmail、Live mail 等),并且需要使用列表中的一个词干验证为 FALSE 的任何电子邮件地址。

我该怎么做?

【问题讨论】:

  • 离题了,但为什么要阻止人们使用免费电子邮件帐户注册?我认识一些人,他们的唯一电子邮件地址是免费的。
  • 这是一个企业对企业网络应用程序,涉及在真实的实体公司中作为员工/合作伙伴进行验证。例如 Apple.com。
  • 好的,很公平。除了雅虎员工的地址与免费雅虎地址不同吗?
  • 在这里获得相当的语义,但在这种情况下,我们必须手动授予他们访问权限。

标签: jquery jquery-validate email-validation


【解决方案1】:

如果您已经有这个正在运行的服务器端,只需向您的服务器发出一个 AJAX 请求以重用相同的验证逻辑。 (您的客户端代码将向服务器发送一个 XMLHttpRequest,服务器的验证逻辑运行,并将状态返回给客户端 - 所有这些都不需要重新加载 HTML 页面。您已经表明您正在使用 jQuery,所以这个应该很容易。)

作为额外的好处,您的服务器端代码可以缓存检查 - 这样当服务器重复检查(可能仅几秒钟后)以进行验证时,无需客户端参与(安全所必需的,因为任何由客户端不能被信任 - 想想 Firebug 等) - 服务器可能不需要重复其检查的全部工作。 (这可能太微不足道而无法优化,因为不知道您的服务器端验证具体包括什么。如果它包括对 Web 服务的任何外部调用等,则可能值得缓存。)

【讨论】:

  • 你的回答比我的好很多;所以我要摆脱我的。
  • 我不是这个项目的服务器端人员,因此在我拥有的时间范围内移动他们的代码以访问 XMLHttpRequest 是不可行的。但我喜欢你的想法。我需要一个或多或少粗糙和肮脏的解决方案。
  • @JackMcDade - 你有关于如何确定免费电子邮件地址的“规则”吗?也许它就像域名黑名单一样简单?鉴于这些要求,我确信有人可以提供仅 JavaScript 的实现。否则,您可能还可以调用第 3 方 Web 服务 - 无需将服务器上已经存在的实现作为一个实现。
  • 是的,它只是一个静态的黑名单。我有一个非常小的 js 数组等待我通过正确的验证方法运行它。
【解决方案2】:

使用您的服务器端数组生成一个包含相同值的 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();
  }
});

【讨论】:

  • 对于如何将其转化为实际的 jQuery Validate 规则有点模糊。你能详细说明一下吗?
【解决方案3】:

为什么你不把所有你不需要的电子邮件都整理成一个数组。

例如。

var email = new Array('Hotmail','Gmail','Yahoo',...,'Live');

您如何拥有所有的电子邮件列表、创建数组或 json 文件、xml、txt、...等

接下来。使用正则表达式制作函数处理程序。

$(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

我认为使用权重的树形结构可以更好地做到这一点, 即,如果您可以创建一个包含电子邮件的树。

那么您可以在对数时间内评估您的电子邮件。并且在遍历树权重结束时,您可以决定它是否在您的接受列表中。

即是否在树中

【讨论】:

猜你喜欢
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2012-01-28
  • 2018-03-07
  • 2010-09-26
  • 2011-04-10
  • 2011-02-24
相关资源
最近更新 更多