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

标签 javascript regex validation email

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

我在这里找到了合适的问题,但它们仍然与我寻求帮助的不一样。 请帮助实现这一点

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

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

最佳答案

这两种方法都有效。

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

(?!(?: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;
}

您可以决定哪种方法最适合您。

关于javascript - 电子邮件验证Javascript+RegEx,但排除某些域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388648/

相关文章:

javascript - 在另一个字段中显示html表单的输入值

ruby-on-rails - 如何在模型中验证来自 Controller 的数据

php - 为什么这个函数返回 "undefined"?

javascript - 错误: 'let' declarations can only be declared inside a block

javascript - 对于JS字符串,s === “”是否始终与s.length == 0相同?

javascript - javascript 中的警报未显示

javascript - 当用户在 Angular 中使用正则表达式仅输入 0 或 0.0 时如何显示错误消息?

python - 处理字符串中的转义字符

regex - 使用正则表达式删除子字符串直到第一个 token

validation - 带参数的 Angular 2 自定义验证器