编辑:“我的网站”仅向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");
}

但是它不会检测到诸如[email protected][email protected]之类的电子邮件。

能否请你帮忙?非常感谢!

最佳答案

首先,我建议不要这样做。由于yahoo确实提供了高级付费服务(我自己使用该服务,如果您不允许我注册,将会很烦恼)。

另外,您还需要在客户端(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

检查所有子域的代码(对于[email protected]):
// get the string after '@'
var after_at = email.substring(email.indexOf('@') + 1);

// get all parts split on '.', so for [email protected] 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

10-02 14:14