【问题标题】:Email validation Javascript+RegEx, but to exclude certain domains电子邮件验证 Javascript+RegEx,但要排除某些域
【发布时间】:2014-12-10 21:21:53
【问题描述】:

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

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

是否可以通过 RegEx 修改来完成,或者我必须在主要电子邮件验证完成后使用循环和搜索子字符串(@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;
}
}

【问题讨论】:

  • 您能分享您的尝试并告诉我们为什么它们不适合您吗?
  • 我不确定使用哪种方法 - RegEx mod 或循环来搜索子字符串?因为我想排除一个域数组,而不是单个域。我迷失了正则表达式
  • 也许使用a proper email address parser 解析而不是尝试使用正则表达式。获得正确的正则表达式将很难。例如,FOO@APPLE.COM 等价于 FOO@apple.com,因为主机名不区分大小写,FOO@apple.com. 也是有效的,但只是表示不应使用后缀搜索列表解析 apple.com
  • 这两个细微之处只是我在进入@ 之前可能出现的内容之前注意到的事情,以及您是否在右侧突破@
  • 是的,在 RegEx 的情况下区分大小写是一个问题,所以最好使用数组检查,通过小写输入

标签: javascript regex validation email


【解决方案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;
}

由您决定最适合哪种方法。

【讨论】:

    【解决方案2】:

    您可以使用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.');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2023-04-06
      相关资源
      最近更新 更多