【问题标题】: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 答案。我正在寻找一种在用户输入时验证值的方法。感谢您的帮助。

标签: javascript regex credit-card


【解决方案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? 以获取匹配最流行卡片的正则表达式。

【讨论】:

  • 谢谢。请参阅上面的答案。我正在寻找一种在用户输入时验证值的方法。
  • 如果您想允许多种类型的信用卡,这将变得非常复杂。
猜你喜欢
  • 2015-09-14
  • 2010-11-30
  • 2016-07-31
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多