检查电子邮件地址是否为“免费网络邮箱”;(hotmail,雅虎. .)

Check if an email address is not a "free webmail" (hotmail, yahoo...)

本文关键字:hotmail 雅虎 是否 电子邮件地址 免费 网络 免费网 检查      更新时间:2023-09-26

编辑:我的网站只向Gmail和Google Apps用户提供服务,我想确保其他免费电子邮件用户在启动验证配对时不会收到错误消息。

所以事情是这样的:要么我试着找出这是一个Gmail/Google Apps地址,要么试着阻止流行的免费邮件用户尝试订阅。

我想阻止所有属于Gmail, Hotmail,雅虎等的"免费"电子邮件地址…从订阅我的网站。

如何在javascript中正确地做到这一点?下面是我开发的第一个脚本:

var domain_matche = /@(.*)$/.exec(email);
var domain_name = domain_matche[1].substring(0, domain_matche[1].indexOf(".", 0))
if (domain_name == "hotmail" || domain_name == "yahoo" ) {
      alert("not a valid email");     
} 

但它不检测电子邮件如test@hotmail.co.il或test@subdomain.hotmail.com

你能帮帮忙吗?非常感谢!

首先,我建议不要这样做。因为雅虎确实提供了一项付费服务(我自己也在使用,如果你不允许我注册,我会很恼火)。

你还需要在客户端(JS)和服务器 (PHP, ASP.net或任何你正在使用的)上实现,因为我可以很容易地禁用Javascript,然后你的检查不会被执行。

但是,如果你知道你在做什么,并希望它正确地完成,首先寻找'@',然后寻找下面的'。',并获取它们之间的字符串。

代码:

// get index of '@'
var index_at = email.indexOf('@');
// get index of the '.' following the '@' and use it to get the real domain name
var domain = email.substring(index_at + 1,  email.indexOf('.', idx));
// now use the domain to filter the mail providers you do not like

检查所有子域的代码(对于abc@subdomain.hotmail.com):

// get the string after '@'
var after_at = email.substring(email.indexOf('@') + 1);
// get all parts split on '.', so for abc@x.y.z you can check both x and y
var dot_split = after_at.split('.');
for(var i = 0; i < dot_split.length; i++)
    // check each dot_split[i] here for forbidden domains

Till Helge Helwig的意思是,你不能简单地在JavaScript或任何客户端验证中做到这一点,你需要在服务器上验证。

这个正则表达式应该匹配hotmail和yahoo: [a-zA-Z_-.]+@((hotmail)|(yahoo))'.[a-z]{2,4}(我只是在飞行中潦草地写了这个正则表达式,所以请彻底测试它)

    function submitForm() 
       {
    var email = form.email.value;
    var emailRegex = /^['w-'.]+@(['w-]+'.)+['w-]{2,4}$/;
    var freeRegex = /^['w-'.]+@([hotmail+'.]|[yahoo+'.]|[gmail+'.])+['w-]{2,4}$/;
     if(!email.match(emailRegex)) 
        {
           alert("Please enter a valid email address")
           return false;
        }
     if(email.match(freeRegex))
        {   
           alert("You cannot use free email address!")
           return false;
          }
      return true; 
     }

我一直在为一个想要过滤hotmail, yahoo, gmail和其他用户到他网站上不同的登录页面的客户自己构建类似的东西。我不问为什么,我就是这么做!

在这种情况下,我们告诉用户我们更喜欢一个非自由地址,以快速跟踪他们的回调,并给他们一个选项,把不同的选项。

这是我处理表单的jQuery版本,使用的信息从上面的帖子,特别是regex从@Simeon

$("form").submit(function(){
    // Get the email value from the input with an id="email"
    var email_addr = $('#email').val();
    // The regex to check it against
    var re = '[a-zA-Z_''.-]+@((hotmail)|(yahoo)|(gmail))''.[a-z]{2,4}';
    // Check if the email matches
    if(email_addr.match(re)){
        // Email is on the filter list
        // Return false and don't submit the form, or do whatever
        return false;
    } else {
        // Email ok
        // Allow the form to be submitted
        return true;
    }
});

所以,我知道你可以打开javascript并去掉这个,这在我们的例子中并不重要,因为我们检查服务器端并在那里做一些事情,但这是一种方法,所以用户不需要等待页面刷新之前得到一个消息关于我们正在做什么。

我希望这能帮助到一些人!