2017-04-07 48 views
3

我想弄清楚如何使用正则表达式来传递一个6位数字的字符串。我的麻烦是字符串可以是任何6位数字,除非它以12开头。所以第一个数字可以是1但不是第二个数字是2.第二个数字可以是2,但是如果第一个数字是1,则不能。正则表达式限制数字字符串

我试过这个,([^1])([^2])(\d{4}),但是没有考虑到两个数字,所以它会在第二个地方阻塞任何2。

谢谢你的帮助。

+0

使用[alteration](http://www.regular-expressions.info/alternation.html) – dawg

回答

5

您可以使用

^([02-9][0-9]|[0-9][013-9])[0-9]{4}$ 

regex demo

详细

  • ^ - 串
  • 开始
  • ([02-9][0-9]|[0-9][013-9]) - 无论是两个备选方案:
    • [02-9][0-9] - 任何数字,但1,然后任何数字
    • | - 或
    • [0-9][013-9] - 任何数字,然后任何数字但2
  • [0-9]{4} - 任何4位数字
  • $ - 端字符串。

另一种方法是使用负前瞻:

^(?!12)[0-9]{6}$ 

another demo。如果前两位数字为12,则(?!12)未能通过匹配。 [0-9]{6}将匹配6位数字。

根据正则表达式库/方法,^/$锚可能不是必需的。前瞻并不总是被支持的。

+1

非常感谢你^(?! 12)[0-9] {6} $完美地工作。 – Lucas

相关问题