在 Jest 中使用正则表达式验证屏蔽的信用卡号



我正在尝试使用 Jest 中的match函数使用正则表达式。

我有一个值,其中卡号被字符X屏蔽了 9 次。

我想确保值中的X出现 9 次,而不是更多或更少的次数。

不确定是我的正则表达式是错误的还是我对开玩笑中match的理解。

例如:

test("cardNumber should be masked XXXXXXXXX", () => {
const val = 'XXXXXXXXX1111';
const regX = new RegExp(/([X]{9})/);
expect(val).toMatch(regX);
});

事实证明,这与 Jest 无关,但为了以防万一,您提供了上下文是件好事。

正则表达式模式的一些问题/误解,一些装饰性的,一个不是:

[X]X相同。正则表达式模式中的括号表示字符组(匹配组中的任何字符),此处不需要这样做。

()创建一个捕获组,也不需要这样做,因为我们只需要一个关于字符串是否匹配的"是/否"答案。

鉴于此,我们可以将模式简化为/X{9}/匹配字符串中任意位置包含 9 个连续X字符的字符串。因此,这将匹配字符串"XXXXXXXXXXXXXXXXXXXX1111""foobar XXXXXXXXX quux",根据您的规范,这些都是误报。

尽管您的规范并不完全清楚,但根据后续注释,修复可能会使用锚点。/^X{9}d{4}$/似乎最精确,指定了 9 个X字符,后跟正好 4 个数字,字符串的正面和背面分别用^$锚定。你可以放宽它,比如说,/^X{9}d+$/使用一个或多个数字。

顺便说一句,您不需要在此处使用new RegExp构造函数。直接正则表达式文本更干净:

expect(val).toMatch(/^X{9}d{4}$/);

最新更新