Visa Electron卡号正则表达式无法匹配测试用例问题咨询
问题根因
你编写的正则存在长度计算错误:规则中指定的4位前缀已经占用了卡号的前4个字符,后续[0-9]{16}要求再匹配16位数字,总长度要求为20位。但Visa Electron卡号总长度为16位,你传入的测试卡号4844640696905509总长度也只有16位,前缀后仅剩余12位数字,不符合正则的长度要求,因此匹配失败。
修正方案
将正则后续数字的匹配量词从{16}调整为{12}即可,修正后的代码如下:
const cards = [ { name: 'Visa Electron', length: '16', prefixes: '4026,4175,4405,4508,4844,4913,4917', regexp: /^(4026|4175|4405|4508|4844|4913|4917)[0-9]{12}$/ }]; console.log(cards[0].regexp.test('4844640696905509')) // 执行后输出true
额外优化建议
如果后续需要适配不同前缀长度、不同总长度的卡规则,可以通过代码动态计算后续数字的匹配长度:用卡号总长度减去前缀的长度,自动生成对应量词,避免手动计算出错。
内容的提问来源于stack exchange,提问作者ONYX
相关产品推荐
相关产品推荐

