正则表达式 - 信用卡验证

Regex - Credit Card validation

我正在寻找一种方法来验证信用卡模式的开头。因此,例如,让我们以万事达卡为例。

它说(参考:https://www.regular-expressions.info/creditcard.html):

MasterCard numbers either start with the numbers 51 through 55...

我正在寻找当用户输入时 returns 为真的正则表达式:

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 :(

应该是:

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

您的正则表达式匹配以 5 开头的字符串或其中任何位置具有 5155 的字符串,因为 ^ 仅在左侧|.

的一侧

如果你想允许部分进入,你可以使用:

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

请参阅 以了解匹配最流行卡片的正则表达式。

您是否在用户输入时进行验证?如果是这样,您可以在第一个选项中添加一个行尾 ($),这样它 returns 只有在以下情况下才为真:

  • 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