检查电子邮件地址是否为“免费网络邮箱”;(hotmail,雅虎. .)
Check if an email address is not a "free webmail" (hotmail, yahoo...)
编辑:我的网站只向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并去掉这个,这在我们的例子中并不重要,因为我们检查服务器端并在那里做一些事情,但这是一种方法,所以用户不需要等待页面刷新之前得到一个消息关于我们正在做什么。
我希望这能帮助到一些人!
- 雅虎财经向服务器发送错误的汇率
- 需要雅虎天气API的帮助
- 雅虎财经API历史报价
- hello.js雅虎API集成
- 如何在android中显示实时雅虎金融股票数据..json格式如下所示
- 通过雅虎地方查找器获取JSON数据
- 使用hello js获取雅虎朋友列表
- Ajax下拉列表,用于搜索输入以使用雅虎天气查找天气
- jQuery 雅虎天气 API 调用失败
- 使用雅虎财经 API 的实时货币汇率
- 地理位置雅虎地图API
- 有没有办法使用 javascript 控制像雅虎这样的电子邮件服务
- 如何使用YDN获取雅虎的地址簿
- 选择雅虎一种货币对的实时汇率
- 如何构建雅虎风格的导航栏
- CasperJS获得前5名雅虎邮件
- 我可以使用雅虎压缩程序将压缩后的文件发送到浏览器吗
- 无法使用javascript从雅虎API注销
- 雅虎股票API检索趋势股票(市场推动者)
- 检查电子邮件地址是否为“免费网络邮箱”;(hotmail,雅虎. .)