正则表达式 - 信用卡验证

Posted

技术标签:

【中文标题】正则表达式 - 信用卡验证【英文标题】:Regex - Credit Card validation 【发布时间】:2018-08-15 22:32:55 【问题描述】:

我正在寻找一种方法来验证信用卡模式的开始。以万事达卡为例。

上面写着(参考:https://www.regular-expressions.info/creditcard.html):

万事达卡号码以 51 到 55 开头...

我正在寻找当用户输入时返回 true 的正则表达式:

const regex = /^5|5[1-5]/; // this is not working :(

regex.test("5"); // true
regex.test("51"); // true
regex.test("55"); // true
regex.test("50"); // should be false, but return true because it matches the `5` at the beginning :(

【问题讨论】:

好吧,如果是51-55,你为什么允许5?您的第二个正则表达式模式的选项将永远被满足(实际上会,但在信用卡号的任何位置,而不是在开头)。 只要使用^5[1-5] 万事达卡也以其他 BIN 号码开头。 见@revilheart 答案。我正在寻找一种在用户输入时验证值的方法。感谢您的帮助。 【参考方案1】:

您是否在用户输入时进行验证?如果是这样,您可以在第一个选项中添加行尾 ($),以便仅在以下情况下返回 true:

5 是目前为止唯一输入的字符 字符串以 50-55 开头
const regex = /^(5$|5[1-5])/;

regex.test("5"); // true
regex.test("51"); // true
regex.test("55"); // true
regex.test("50"); // false

【讨论】:

这正是我想要做的,在用户输入时验证值。正是我想要的。谢谢!【参考方案2】:

应该是:

const regex = /^5[1-5]/;

您的正则表达式匹配以5 开头的字符串或包含5155 的字符串,因为^ 仅在| 的左侧。

如果要允许部分条目,可以使用:

const regex = /^5(?:$|[1-5])/;

请参阅Validating credit card format using regular expressions? 以获取匹配最流行卡片的正则表达式。

【讨论】:

谢谢。请参阅上面的答案。我正在寻找一种在用户输入时验证值的方法。 如果您想允许多种类型的信用卡,这将变得非常复杂。

以上是关于正则表达式 - 信用卡验证的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 信用卡验证

CakePHP 使用正则表达式验证蒙面信用卡

为啥 C# 正则表达式信用卡验证函数会使用无效值进行验证? [复制]

使用正则表达式验证信用卡号

用于验证日期的正则表达式 [重复]

信用卡公司会发布官方正则表达式吗?