正则表达式限制数字字符串

时间:2017-04-07 22:47:09

标签: regex

我试图找出如何使用正则表达式传递一个6位数的字符串。我的麻烦是字符串可以是任何6位,除非它以12开头。所以第一个数字可以是1,但如果第二个数字是2则不是。第二个数字可以是2,但如果第一个数字是1,则不是。

我尝试了这个,([^1])([^2])(\d{4})但是没有考虑到这两个数字,所以它会阻止第二个点中有2个的任何数字。

感谢您的帮助。

1 个答案:

答案 0 :(得分: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位数。

根据正则表达式库/方法,可能不需要^ / $个锚点。也不总是支持前瞻。