【问题标题】:Regex with constraints, look-ahead function带约束的正则表达式,前瞻功能
【发布时间】:2016-09-30 14:17:57
【问题描述】:

我正在尝试编写 10 到 12 位数字之间的正则表达式。 {0,5} 之间会有可选的前导 0(零),然后是 10-12 位之间的数字字符串。不管有多少个零(0 到 5),我都希望前导零后有 10-12 个数字

例子:

0000012345 should not be passing 
0012345678 should not be passing as there are only 8 digits after leading zeros

我试过了:

^(0{0,5}(?=\d{10,12}$)^\d{1,2}?\s?(\d{10})$

【问题讨论】:

  • 哪种语言?
  • 我有一个问题。为什么\s 在那里?
  • 尝试在 regexplanet.com(任何正则表达式引擎)验证我的代码。 \s 有一个可选空间,因此它可以是 12 1234567890 或 121234567890
  • 您上面的规范没有提到空格,或者需要向前看。您能否举出更多的例子,或者更严格地说明您的要求是什么?
  • 任何位置都可以有空格吗?

标签: regex


【解决方案1】:

我认为

^0{0,5}[1-9]\d{9,11}$

应该是你需要的。它通过要求它是非零来强制不将前导零计算为后面的数字之一。然后可以有9-11个其他数字(包括0)。

如果您需要在任何时候包含一个可选空格(正如您的 RegEx 所建议的那样),RegEx 将会增长很多,并且使用一些额外的代码可能会更容易做到这一点。但是,如果您给出确切的要求,我会相应地编辑答案。

【讨论】:

  • 我认为它在没有空格选项的情况下可以部分工作,让我尝试一下。会回复你的。谢谢
【解决方案2】:
^0{0,5}+\d{0,2}\s?\d{10}$

       ^^

您没有指定语言。这里需要“占有量词”。

查看演示:

https://regex101.com/r/m5sOAJ/1

或者,如果您的正则表达式不支持所有格量​​词:

^(?=(0{0,5}))\1\d{0,2}\s?\d{10}$

查看演示:

https://regex101.com/r/m5sOAJ/3

【讨论】:

  • 0000012345678.. 它会失败
  • @tomsam 上面的正则表达式不会失败
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 2015-09-13
  • 2020-09-09
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多