4

我在想出一个合适的正则表达式或一组正则表达式时遇到了无穷无尽的麻烦。

我想要做的是检测:

  • 检测长度为 13 到 19 的数字的连续运行
  • 检测穿插长度为 13 到 19 的空格的连续数字
  • 检测穿插长度为 13 到 19 的破折号的连续数字

基本的业务要求是警告用户他们可能在文本字段中输入了信用卡号,他们不应该这样做(尽管只是警告,而不是硬错误)。文本字段可以跨越多行,最长可达 8k,CC# 可以嵌入到任何地方(不太可能拆分为多行),可能超过 1 个 CC#(尽管检测到至少1 的存在是我的全部)需要。我不需要实际值)。不需要验证校验位。

长度检查可以在外部完成...即我很乐意循环一组匹配项,删除任何空格/破折号,然后进行长度比较。

但是...... JavaScript 正则表达式正在击败我的每一次尝试(只是不在正确的“头部空间”中)所以我想我会在这里问:)

谢谢!

4

5 回答 5

2

以下是信用卡验证所需的所有规则。您应该能够在 Javascript 中轻松地做到这一点。

于 2009-07-23T23:21:53.803 回答
1

似乎是一个相当简单的正则表达式。我已经使您的要求更加严格-实际上,您将匹配日期列表,例如“1999-04-02 2009-12-09 2003-11-21”。我假设这些部分将分为三到六组,并且它们本身将是三到八个数字/破折号/空白的组。您可以相当轻松地调整这些数字。

/[0-9]{13,19}|([0-9- ]{3,8}){3,6}/

我不确定这是否是您想要的,但我认为值得一试。如果这不是您要找的东西,也许您可​​以向我们展示一些接近或给出您想要的印象的正则表达式?

于 2009-07-23T23:18:14.293 回答
1

你想用 Javascript 正则表达式 8k 的文本吗?不要浪费您的时间(或用户较差的 CPU)使用 Javascript 执行此操作。无论如何,您都需要服务器端验证,所以就这样吧。

于 2009-07-24T00:08:52.803 回答
1

这是许多信用卡验证步骤的绝佳脚本。

http://javascript.internet.com/forms/val-credit-card.html

于 2009-07-24T07:37:47.350 回答
0
/(?:\d[ -]?){12,18}\d/

检查 13-19 位数字,每个数字(最后一位除外)后面可能有一个空格或破折号。不过,这是一个非常自由的正则表达式,您可能希望将其缩小到已知的实际信用卡格式。

于 2009-07-23T23:21:12.510 回答