Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测到可能的信用卡号的Javascript正则表达式_Javascript_Regex_Credit Card - Fatal编程技术网

检测到可能的信用卡号的Javascript正则表达式

检测到可能的信用卡号的Javascript正则表达式,javascript,regex,credit-card,Javascript,Regex,Credit Card,我一直很难想出一个合适的正则表达式或一组正则表达式 我想做的是检测: 检测长度为13到19的数字的连续运行 检测插入长度为13到19的空格的连续数字运行 检测插入长度为13到19的破折号的连续数字运行 基本的业务要求是警告用户,他们可能在文本字段中输入了信用卡号码,但他们不应该这样做(尽管只是警告,而不是硬错误)。文本字段可以跨多行,长度可以高达8k,CC#可以嵌入任何位置(不太可能跨多行拆分),可以超过1 CC#(尽管我只需要检测至少1的预测值。我不需要实际值)。不需要验证校验位 长度检查

我一直很难想出一个合适的正则表达式或一组正则表达式

我想做的是检测:

  • 检测长度为13到19的数字的连续运行
  • 检测插入长度为13到19的空格的连续数字运行
  • 检测插入长度为13到19的破折号的连续数字运行
基本的业务要求是警告用户,他们可能在文本字段中输入了信用卡号码,但他们不应该这样做(尽管只是警告,而不是硬错误)。文本字段可以跨多行,长度可以高达8k,CC#可以嵌入任何位置(不太可能跨多行拆分),可以超过1 CC#(尽管我只需要检测至少1的预测值。我不需要实际值)。不需要验证校验位

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

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


谢谢

似乎是一个相当简单的正则表达式。我已经把你的要求做得更严格了一点——事实上,你需要匹配日期列表,比如“1999-04-022009-12-092003-11-21”。我假设这些部分将分为三到六个组,它们本身将是由三到八个数字/破折号/空格组成的组。您可以相当轻松地调整这些数字

/[0-9]{13,19}|([0-9- ]{3,8}){3,6}/
我不确定这是你想要的,但我觉得值得一试。如果这不是你想要的,也许你可以给我们看一些接近的正则表达式,或者给我们一个你想要的印象

/(?:\d[ -]?){12,18}\d/

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

您想用Javascript正则化8k文本吗?不要浪费你的时间(或者用户的CPU太差)用Javascript来做这件事。无论如何,你都需要服务器端验证,所以就让它去吧。

这里有一个很好的脚本,用于许多信用卡验证步骤


这似乎是一个非常奇怪的要求。因此,如果我理解正确,您有一个带有表单字段的网页。这些字段都不是信用卡字段,但出于某种原因,您希望确保没有在其中任何字段中输入信用卡号。。。我猜这只是为了防止用户被你的用户界面弄糊涂,认为他们需要输入某种类型的支付信息?@chirs-lively:几乎正确:)。这更像是一个工作流场景,有人可能会决定添加一个包含客户cc#的便条(别误会,我也觉得这听起来很疯狂……但你打算怎么办?)。所以弹出一个警告,提醒人们“请不要那样做”似乎不是完全不合理的需要。8K是上限,而且不太可能达到。我不认为雷格克斯对8K的比赛会让个人电脑在任何时间内屈服。您确定吗?底线是需要服务器端验证。通过让客户机接受此类操作,您获得的收益微乎其微。不希望验证cc。谢谢你。