我可以使用什么正则表达式来验证0到255之间的数字?

时间:2011-07-02 22:51:30

标签: php regex validation pcre

我想验证0-255范围内的数字

我有这个表达

'/^([0-1]?[0-9]?[0-9])|([2][0-4][0-9])|(25[0-5])$/'

但这接受任何数字...... 这有效:

'/(^[0-1]?[0-9]?[0-9]$)|(^[2][0-4][0-9]$)|(^25[0-5]$)/'

为什么每个选项都必须有^和$?

编辑:我有,但我无法回答我的问题,因此 - ^$的优先级高于|,因此/^(...)$/帮助了

8 个答案:

答案 0 :(得分:8)

注意: @alex's answer是要走的路。使用正则表达式验证数字范围就像使用手提钻来捕捉苍蝇一样。

但是我想为这个“问题”提供一个解释。


你不必,你只需要正确分组,这意味着你必须对交替进行分组:

'/^(([0-1]?[0-9]?[0-9])|([2][0-4][0-9])|(25[0-5]))$/'
// ^                                             ^

否则表达式将被解释如下(逻辑上)

(^number) OR (number) OR (number$)

使用括号,它将是

^(number OR number OR number)$

答案 1 :(得分:7)

请勿使用正则表达式来验证数字范围。

只是使用条件......

if ($number >= 0 AND $number <= 255) {
   ...
}

这将确保数字介于0到255之间,这正是你的正则表达式所做的。

要具体回答你的问题,它不起作用,因为你需要用捕获组包装整个东西,否则正则表达式引擎会对每个正则表达式执行 OR ...

/^([0-1]?[0-9]?[0-9]|[2][0-4][0-9]|25[0-5])$/

另请注意,$会在任何尾随\n之前匹配。如果你真的想在字符串的末尾匹配,请使用\z

答案 2 :(得分:3)

另一种方法(但我认为先前的解决方案更好)

in_array($number, range(0, 255))

答案 3 :(得分:2)

我进一步玩了,这里是严格的0-255范围的正则表达式,没有允许的前导零:

'/^([0]|[1-9]\d?|[1]\d{2}|2([0-4]\d|5[0-5]))$/'

答案 4 :(得分:1)

首先,我同意@Alex的回答是可行的方式;但是,值得一提的是,正则表达式版本可以用更简洁的模式完成:

/^([01]?\d{1,2}|2([0-4]\d|5[0-5]))$/

...这是我在数字解析不是一个选项时使用的。

答案 5 :(得分:0)

[0-9] | [1-9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [0-9] | 25 [0-5]

将起作用

答案 6 :(得分:0)

^(([0-9]|[1-9][0-9])|[1][0-9][0-9]|[2][0-5][0-5])$这适用于0-255,意味着没有前导零,例如001

答案 7 :(得分:0)

我知道这已经得到了解答,但我需要一个类似的页面路由正则表达式;除了1-66的范围。这很好用:/ ^(?!67 | 68 | 69)[1-6] [0-9] | [1-9] $ /