检查电子邮件地址是否不是“免费网络邮件”(hotmail,yahoo ...)

时间:2011-11-25 16:03:43

标签: javascript

修改:我的网站仅向Gmail和Google Apps用户提供服务,并且确实希望其他免费电子邮件用户在启动oauth配对时不会收到错误消息。

所以这是交易:要么我试图弄清楚这是Gmail / Google Apps地址,要么试图阻止热门免费邮件用户尝试订阅。

我想阻止所有属于Gmail,Hotmail,Yahoo等的“免费”电子邮件地址来自我的网站订阅。

如何在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。

你可以帮忙吗?非常感谢!

4 个答案:

答案 0 :(得分:4)

首先,我建议不要这样做。因为雅虎确实提供高级PAID服务(我自己使用它并且会很烦恼如果你不允许我注册)。

此外,你需要在客户端(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

答案 1 :(得分:1)

Till Helge Helwig的意思是,您只是无法在JavaScript中执行或任何客户端验证,您需要在服务器上对此进行验证。

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

答案 2 :(得分:1)

我自己一直在为那些想要将hotmail,yahoo,gmail和其他用户过滤到他网站上的不同目标网页的客户自己构建这样的东西。我不问为什么,我只是这样做!

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

这是我处理表单的jQuery版本,使用上面帖子中的信息,特别是来自@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并摆脱这个,这在我们的情况下无关紧要,因为我们检查服务器端并在那里做一些事情,但它是一种方法来做到这一点,所以在给出关于我们正在做什么的消息之前,用户不需要等待页面刷新。

我希望能帮助别人!

答案 3 :(得分:0)

    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; 
     }