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

Iva*_*ana 4 php regex validation pcre

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

我有这个表达

'/^([0-1]?[0-9]?[0-9])|([2][0-4][0-9])|(25[0-5])$/'
Run Code Online (Sandbox Code Playgroud)

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

'/(^[0-1]?[0-9]?[0-9]$)|(^[2][0-4][0-9]$)|(^25[0-5]$)/'
Run Code Online (Sandbox Code Playgroud)

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

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

Fel*_*ing 8

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

但是,我想为这个"问题"提供一个解释.


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

'/^(([0-1]?[0-9]?[0-9])|([2][0-4][0-9])|(25[0-5]))$/'
// ^                                             ^
Run Code Online (Sandbox Code Playgroud)

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

(^number) OR (number) OR (number$)
Run Code Online (Sandbox Code Playgroud)

使用括号,它将是

^(number OR number OR number)$
Run Code Online (Sandbox Code Playgroud)


ale*_*lex 7

不要使用正则表达式来验证数字范围.

只是使用一个条件......

if ($number >= 0 AND $number <= 255) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

/^([0-1]?[0-9]?[0-9]|[2][0-4][0-9]|25[0-5])$/
Run Code Online (Sandbox Code Playgroud)

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