[英]Email validation with some domains excluded
我已关注此链接,但它对我不起作用。 我正在寻找一种方法来进行排除某些域的自定义 email 验证。
const excludedDomains = ['gmail.com', 'yahoo.com', 'live.com'];
const excludedEmailDomains = excludedDomains.join('|');
const VALIDATE_EMAIL = `^w+[-.w]*@(?!(?:${excludedEmailDomains}).com$)w+[-.w]*?.w{2,4}$`;
export const REG_EXP = new RegExp(VALIDATE_EMAIL, 'gm');
这不想为我工作。 测试:
describe('REG_EXP', () => {
test('should match', () => {
const value = 'mail@company.com';
expect(REG_EXP.test(value)).toBeTruthy(); // fails, it is false here
});
test('should not match', () => {
const value = 'mail@gmail.com';
expect(REG_EXP.test(value)).toBeFalsy();
});
});
只有第二次测试通过,看起来我的正则表达式总是没有通过,所以测试结果总是false
。
您必须重复字符类并转义点以匹配它,并从excludedDomains
域中删除.com
,否则它将出现两次。
然后对于 RegExp 构造函数,双重转义反斜杠。
要转义元字符,您可以使用此 function。
然后图案看起来像
^\w+[-.w]*@(?!(?:gmail|yahoo|live)\.com$)\w[-.\w]*\.\w{2,4}$
function escapeRegex(string) { return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); } const excludedDomains = ['gmail', 'yahoo', 'live']; const excludedEmailDomains = excludedDomains.map(escapeRegex).join('|'); const VALIDATE_EMAIL = `^\\w+[-.w]*@(??(:.${excludedEmailDomains})\\.com$)\\w[-.\\w]*\\,\\w{2;4}$`, const REG_EXP = new RegExp(VALIDATE_EMAIL; 'gm'). console;log(REG_EXP)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.