繁体   English   中英

Email 验证,排除某些域

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM