在javascript中学习regexp。我需要检查输入的电子邮件。
有这个:
reg=/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
但我需要检查此电子邮件是否以@google.com
或@me.com
结束。像/@google.com$|@me.com$/
一样。几乎打破了我的想法。请帮帮我)
答案 0 :(得分:3)
从编程的角度来看,您应该首先检查您的电子邮件字符串terminates是否包含@google.com
或@me.com
,然后再运行正则表达式。
这将节省您的时间:正则表达式将是您知道的所有通用邮件格式正则表达式,您可以在任何其他时间添加更多域过滤器(将终止域放在数组或配置中......)。
它的CPU密集程度也低得多。如果你需要连续执行这些检查并期望过滤掉大量的电子邮件,那么你会注意到一个明显的区别:虚拟字符串比较比正则表达式更快。</ p>
var emails = ['jose@me.com', 'hacker@noway.com', 'hacker";DROP TABLES;@me.com' ];
var domains = ['gmail.com', 'me.com'];
function validateEmailFormat(email) {
return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)
}
function validateEmailDomain(email) {
for (i in domains) {
if (email.endsWith('@'+domains[i])) {
return true;
}
}
return false;
}
for (i in emails) {
email = emails[i];
if (validateEmailDomain(email) && validateEmailFormat(email)) {
console.log('OK for '+email);
} else {
console.log('NOT OK for '+email);
}
}
答案 1 :(得分:1)
使用正则表达式验证电子邮件地址是一件棘手的事情。我想如果你只想允许某些域,它会简化一些事情。类似的东西可以做到这一点:
\w+@(google|me)\.com$
\w+
之前的@
当然是简化的。将其展开为您需要的......