正则表达式(PHP)=>更大的,如果没有

时间:2016-07-25 20:19:09

标签: php regex

可以使用正则表达式(php),例如“>”或'如果不是'?

例如:我有一个5号字符串'XXXXX':'00054','47690','20593'......

我需要一个验证的正则表达式:

  1. 5个数字
  2. 大于1
  3. 我有这个:'/ ^ [0-9] {5} $ /'但不验证大于'00001'!

    我正在寻找像'>'这样的东西或'如果不是00000'......

    由于

    PS:我知道可以用:if((int)$ string> 1)

2 个答案:

答案 0 :(得分:3)

当我坚持使用正则表达式时 - 我总是问自己的第一个问题是“我正在描述的是常规语言吗?” - 回答这个问题的最简单方法是尝试绘制有限状态机 - https://en.wikipedia.org/wiki/Finite-state_machine。在你的情况下,它是可能的,它将给你一个如何编写正则表达式的答案。一个简单的有限状态机就可以解决这个问题了 - 第一个字符是0还是1-9?如果它的0向下走一条路径(对下一个数字进行类似的检查),如果它的1-9向下走另一条路径(检查之后是否还有4个数字)。 half done finite state

看看图片的其余部分将如何发挥,我们可以创建一个如下所示的正则表达式:

[1-9][0-9]{4} | 0[1-9][0-9]{3} | 00[1-9][0-9]{2} | 000[1-9][0-9] | 0000[1-9]

P.S。上面的图片是不完整的,只是为了展示如何启动有限状态机的图解 - 我快速绘制它,因此它没有双圆圈来显示“最终”状态,树不会一直走低至5位数。如果你有兴趣,我可以完成树的其余部分,但认为在这种情况下它会有点过分。

编辑根据对蜈蚣鸭的需求 - 这是一个更完整的图纸 larger finite state machine

答案 1 :(得分:1)

我可以找出两种方法:

/^(?!00000)\d{5}$/

首先检查开始后面是否为5个零,然后搜索5位数。

/^(?:[1-9]\d{4}|\d[1-9]\d{3}|\d{2}[1-9]\d{2}|\d{3}[1-9]\d|\d{4}[1-9])$/

这个组合检查5个组合,每个组合在5个位置之一中包含一个非零数字。