【问题标题】:Regex to check for 4 consecutive numbers正则表达式检查 4 个连续数字
【发布时间】:2012-04-24 08:49:39
【问题描述】:

我可以用吗

\d\d\d\d[^\d]

要检查四个连续的数字吗?

例如,

411112 好的

455553 好的

1200003 正常

f44443 正常

g55553 确定

3333 正常

f4442 否

45553 没有

f4444g4444 否

f44444444 没有

【问题讨论】:

  • 倒数第二个例子正确吗?正则表达式 not 是否应该匹配具有多个连续 4 位数字系列的字符串?

标签: regex


【解决方案1】:

如果您想在字符串/\d\d\d\d//\d{4}/ 中查找任何4 位数字系列,都可以。如果要查找正好是 4 位的系列,请使用 /[^\d]\d{4}[^\d]/。如果字符串应该只包含 4 个连续数字,请使用 /^\d{4}$/

编辑:我认为你想找到 4 个相同的数字,你需要一个反向引用。 /(\d)\1{3}/ 可能就是你要找的。​​p>

编辑 2:/(^|(.)(?!\2))(\d)\3{3}(?!\3)/ 只会匹配具有完全相同的 4 个连续数字的字符串。

第一组匹配字符串或任何字符的开头。然后有一个负前瞻,它使用第一组来确保后面的字符不匹配第一个字符(如果有的话)。第三组匹配任何数字,然后重复 3 次并反向引用第 3 组。最后有一个前瞻,确保后面的字符与连续数字系列不匹配。

这种事情在 javascript 中很难做到,因为你没有前向引用和后视之类的东西。

【讨论】:

  • 如果我想标记字符串的任何部分包含 4 位数字,例如411114 或 11114 或 41111
  • 这按预期工作。谢谢你。反向引用是什么意思?
  • 正则表达式中的 \1 引用正则表达式中的第一组 ((\d))。在此处阅读有关它们的更多信息:regular-expressions.info/brackets.html。不过,这也将匹配诸如“41111114”之类的字符串。这就是你想要的吗?
  • 我不想匹配 41111114 因为有超过 4 个“1”
  • 顺便说一句,你是怎么想出这个正则表达式的,看起来很复杂,你能解释一下吗? :P
【解决方案2】:

数字应该是字符串的一部分,还是只需要四个数字。在后一种情况下,正则表达式应该是^\d{4}$^ 标记字符串的开头,$ 结尾。这样可以确保只有四个数字是有效的,在此之前或之后都没有。

【讨论】:

    【解决方案3】:

    这应该匹配四个数字 (\d\d\d\d),后跟一个非数字字符 ([^\d])。如果只想匹配任意四位数字,则应使用\d\d\d\d\d{4}。如果要确保字符串仅包含四个连续数字,请使用 ^\d{4}$^ 将指示正则表达式引擎在字符串的开头开始匹配,而$ 将指示正则表达式引擎在字符串的末尾停止匹配。

    【讨论】:

    • ^\d{4}$ 似乎与连续 4 个数字不匹配
    • \d{4} 似乎允许 51111115,我可以禁止这个吗?
    • @ChinBoon:第一个正则表达式应该只匹配 4 位数字。您确定您正确使用了 Javascript 语法吗?应该是这样的:/^\d{4}$/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多