我想通过白名单来验证域,例如:.com,.co.id,.org
这里我有一个正则表达式模式:
/^[_a-z0-9-]+(\.[_a-z0-9-]+)*(\+[a-z0-9-]+)?@[a-z0-9-]+(\.[a-z0-9-]+)*$/i;
因此,如果用户输入:
有人可以帮助我吗? 谢谢
答案 0 :(得分:2)
尝试
let e = ["example@example.gov",
"example@example.com",
"example@example.co.id",
"example@example.org"];
let d = [".com", ".co.id", ".org"];
let f = x=> d.some(y => new RegExp(`@.*?(${y})`).test(x));
let v = e.filter(x=> f(x));
console.log(v); // show valid emails
正则表达式的
说明 ::与@
之后第一个点后的字母匹配。首先,我们通过.*?
以非贪婪的方式获取@之后的任何字符,然后在第一个点(
之前打开组\.
,并检查所有剩余字符是否为域${y})
。 / p>
答案 1 :(得分:2)
您可以分两步进行:
检查电子邮件的格式是否正确->例如:https://www.regular-expressions.info/email.html,有很多关于此主题的信息来源
验证域是否在域的白名单中
function validateEmail(email) {
//check that the input string is an well formed email
var emailFilter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
if (!emailFilter.test(email)) {
return false;
}
//check that the input email is in the whitelist
var s, domainWhitelist = [".com", "co.id", ".org"];
for (s of domainWhitelist)
if(email.endsWith(s))
return true;
//if we reach this point it means that the email is well formed but not in the whitelist
return false;
}
console.log("validate ->" + validateEmail(""));
console.log("validate abc ->" + validateEmail("abc"));
console.log("validate example@example.gov ->" + validateEmail("example@example.gov"));
console.log("validate example@example.com ->" + validateEmail("example@example.com"));