【问题标题】:what do /s ^ $ do in Regex? [closed]/s ^ $ 在正则表达式中做什么? [关闭]
【发布时间】:2013-12-24 02:01:32
【问题描述】:

所以我今天刚刚学习了正则表达式,我们没有接触到这些符号 /s ^ $

我问的原因是,首先我想知道,但我的任务是为所有有效和常见的信用卡编写一个正则表达式,而我坚持的问题是美国运通卡少了 1 位数。并且不知道如何编写正则表达式,因此只有前两位数为 37(仅限美国运通)时,才允许总共 15 位。

然后我发现了这个:

^((4\d{3})|(5[1-5]\d{2})|(6011)|(34\d{1})|(37\d{1}))-?\s?\d{4}-?\s?\d{4}-?\s?\d{4}|3[4,7][\d\s-]{15}$

如果我从 Visa 取一个 WORKING CC 让我们说(16 位数字)并减去一个,它不起作用,但 15 位数字与美国运通一起工作,谁能解释正则表达式中的作用是什么?

【问题讨论】:

  • read the manual了吗?
  • Read the manual。将正则表达式分解为其最简单的部分。弄清楚每个人做了什么。不要被你面前的大量线路噪音吓倒。没有人能一口消化整个东西。只需将其分解并从最简单的组件开始逐步恢复即可。
  • 问题标题和问题正文完全不匹配。标题是关于\s ^ $的含义,正文是关于验证AMEX卡#
  • qwrrty 为什么会出错? \s- 到底是什么意思?

标签: regex credit-card


【解决方案1】:

正则表达式

^((4\d{3})|(5[1-5]\d{2})|(6011)|(34\d{1})|(37\d{1}))-?\s?\d{4}-?\s?\d{4}-?\s?\d{4}|3[4,7][\d\s-]{15}$

Debuggex Demo

http://regex101.com/r/yO2sY0

这将在底部向您描述您的正则表达式...问题是您的正则表达式无效...

^这是字符串的开头 $ 字符串结束 \s 匹配空格(空格、制表符和新行)。 \S 被否定 \s。

由于以下原因,正则表达式无效

从左到右解释错误。将鼠标光标移到它们上以查看模式中突出显示的错误

-: 不能用速记属性形成范围

解决方案

使用此处记录的以下正则表达式http://www.regular-expressions.info/creditcard.html

^(?:4[0-9]{12}(?:[0-9]{3})?          # Visa
 |  5[1-5][0-9]{14}                  # MasterCard
 |  3[47][0-9]{13}                   # American Express
 |  3(?:0[0-5]|[68][0-9])[0-9]{11}   # Diners Club
 |  6(?:011|5[0-9]{2})[0-9]{12}      # Discover
 |  (?:2131|1800|35\d{3})\d{11}      # JCB
)$

简化正则表达式

\b(?:\d[ -]*?){13,16}\b

【讨论】:

  • 您能否解释一下为什么正则表达式无效?
  • 我认为他/她说提供的正则表达式有效,但他/她不知道为什么
  • @Srb1313711 根据 regex101,他提供的正则表达式无效......当我到达我的计算机时,我会检查 RegexBuddy,而不是我在这一秒上的这个 VM。
  • 我刚刚在这里gskinner.com/RegExr 尝试了带有一些测试卡详细信息的正则表达式,它有效吗?
  • regex101 抱怨你不能有一个以连字符结尾的字符类:[\d\s-]。这是错误的。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2011-05-31
  • 2016-05-16
相关资源
最近更新 更多