电子邮件验证Javascript + RegEx,但要排除某些域名

时间:2014-10-15 17:37:18

标签: javascript regex validation email

我有客户端电子邮件验证脚本Javascript + RegEx,它工作正常,但我想在验证时排除某些域,即所有Apple域,因为它们不起作用(发送到这些地址的电子邮件被删除,恕不另行通知): @ apple.com,@ me.com,@ icloud.com,@ mac.com。

我在这里找到了合适的问题,但他们仍然不同寻求帮助。 请帮助实现这个

是否可以通过RegEx修改完成,或者在主电子邮件验证完成后我必须使用循环和搜索子字符串(@ apple.com,@ me.com,@ icloud.com,@ mac.com)? / p>

function verifyMe(){
var msg='';

var email=document.getElementById('email').value;
if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)) || 
document.getElementById('email').value=='')
{
msg+='- Invalid Email Address: '+email+'\n\n';
document.getElementById('Eemail').style.color='#ffffff';
}
else
document.getElementById('Eemail').style.color='#bbb'
 
if(msg!='')
return false; 
else
{
search_code(); //it's ok go ahead
return true;
}
}

2 个答案:

答案 0 :(得分:1)

这两种方法都有效。

对于正则表达式,只需在正则表达式中的@之后插入以下部分(负向前瞻):

(?!(?:apple|me|icloud|mac)\.com$)

但整体上更好的正则表达式是:

^\w+[-\.\w]*@(?!(?:apple|me|icloud|mac)\.com$)\w+[-\.\w]*?\.\w{2,4}$

对于另一种方法,以下方法应该有效:

function isValidMailAddress(email) {
    var match = /^\w+[-\.\w]*@(\w+[-\.\w]*?\.\w{2,4})$/.exec(email);
    if (!match)
        return false;

    var forbiddenDomains = ["apple.com", "me.com", "icloud.com", "mac.com"];
    if (forbiddenDomains.indexOf(match[1].toLowerCase()) >= 0)
        return false;

    return true;
}

由您来决定您最满意的方法。

答案 1 :(得分:0)

您可以使用jQuery.inArray()检查具有特定域名的电子邮件。

var email ="abc@xyz.edu.au" 
var str = email.split('@').slice(1);
var allowedDomains = ['xyz.edu.au','abc.edu.au'];

if($.inArray(str[0], allowedDomains) === -1) {
   alert('email is allowed.');
}
else{
   alert('email not allowed.');
}