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

mbjcgjjk  于 2022-12-14  发布在  Java
关注(0)|答案(3)|浏览(179)

我有客户端电子邮件验证脚本Javascript+RegEx,它工作正常,但我想排除某些域,而验证,即所有苹果域,因为他们不工作(发送到这些地址的电子邮件被删除,没有任何通知):网站apple.comme.comicloud.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;
}
}
2eafrhcq

2eafrhcq1#

这两种方法都可行。
对于正则表达式,只需在正则表达式中的@之后插入以下部分(负前瞻):

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

这取决于你自己来决定哪种方法让你感觉最舒服。

ix0qys7i

ix0qys7i2#

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

axr492tv3#

我更新了@Lucas答案,以匹配任何类型的国家/地区域名(apple.com、apple.de等)。
此外,它应该更健壮,因为它更接近W3C标准:https://emailregex.com/

^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@(?!(?:yahoo|gmail|icloud|web|googlemail|aol|zoho|protonmail|outlook|hotmail|gmx|mail)[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]{1,10}$)[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$

相关问题