匹配信用卡3或4位CVV的正则表达式

37

我现在还不太懂正则表达式,但迟早我会去阅读和学习。 但是现在我需要一个可以匹配信用卡3或4位cvv的正则表达式,以便在javascript中验证输入,并稍后在PHP中使用。 据我所知,cvv应该是3或4位。

我在我的javascript代码中尝试了这个正则表达式,但我不确定它是否正确。

if (/[0-9]{3}+/.test(value))
return false;

1
如果((parseInt(value) >= 100) || (parseInt(value) <= 9999)),那么这比使用昂贵的正则表达式将所有内容强制转换为3-4位数字范围要容易得多。 - Marc B
4
如果代码以零开头(例如“042”),则可以是三位数字,但仍可能无法通过您的测试,因为数字值低于100。@Marc B:这并不完全相同。 - Mark Byers
正是因为这个原因,我需要在这里使用正则表达式。因为001 < 100且001是一个有效的CVV,但仍然无法通过(parseint(value) >= 100)。我已经尝试过了,@Marc B。 - themhz
2
@mark:确实如此。允许左零填充数字的信用卡公司应该受到惩罚。显然,他们应该改变全球支付系统以禁止这种情况 :) - Marc B
太对了@Marc B。这可能与旧的磁带读取器有关,它期望3个孔,现在他们赚了那么多钱,他们不再在意了。或者他们不再使用大脑了。再次感谢您的引用。 - themhz
1个回答

113

为匹配 3 或 4 个数字,请使用以下正则表达式:

/^[0-9]{3,4}$/

解释:

  • ^: 字符串开头的锚点
  • [0-9]: 0到9之间的数字(也可使用\d
  • {3,4}: 表示数量为3到4个。
  • $: 字符串结尾的锚点

所以每个正则表达式都以 /^ 开始,以 $/ 结束,在中间放置我的模式...我也可以在 $/ 后面开始另一个表达式吗?还是它总是结束? - themhz
2
@themhz:/标记正则表达式的开始和结束。^$是锚点。它们是可选的,但是在这里你需要它们,否则你的正则表达式就不能实现你想要的功能。 - Mark Byers
4
如果有人阅读这篇文章不知道的话,AMEX (美国运通) 卡有 4 位 CVV 安全码,而 Visa 和 Mastercard 则是 3 位。 - Simon_Weaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接