正则表达式 - 信用卡验证
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
开头的字符串或包含51
到55
的字符串,因为^
仅在|
的左侧。
如果要允许部分条目,可以使用:
const regex = /^5(?:$|[1-5])/;
请参阅Validating credit card format using regular expressions? 以获取匹配最流行卡片的正则表达式。
【讨论】:
谢谢。请参阅上面的答案。我正在寻找一种在用户输入时验证值的方法。 如果您想允许多种类型的信用卡,这将变得非常复杂。以上是关于正则表达式 - 信用卡验证的主要内容,如果未能解决你的问题,请参考以下文章