簡體   English   中英

我可以使用什么正則表達式來驗證 0 到 255 之間的數字?

[英]What regex can I use to validate a number between 0 and 255?

我想驗證 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]$)/'

為什么每個選項都必須有 ^ 和 $ ?

編輯:我有,但我無法回答我的問題,所以 - ^$的優先級高於| ,所以/^(...)$/幫助了

注意: @alex 的答案是 go 的方式。 使用正則表達式驗證數字范圍就像使用手提鑽捉蒼蠅一樣。

但盡管如此,我還是想為這個“問題”提供一個解釋。


您不必這樣做,只需正確分組即可,這意味着您必須對交替進行分組:

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

否則表達式將被解釋如下(邏輯上)

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

使用括號,它將是

^(number OR number OR number)$

不要使用正則表達式來驗證數字范圍。

只需使用條件...

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

另一種方法(但我認為以前的解決方案更好)

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

我進一步使用它,這里是嚴格的 0-255 范圍的正則表達式,不允許前導零:

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

首先,我同意@Alex 的答案是 go(如果有)的方法; 然而,值得一提的是,正則表達式版本可以使用更簡潔的模式來完成:

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

...當數字解析不是一個選項時,我使用它。

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

將工作

^(([0-9]|[1-9][0-9])|[1][0-9][0-9]|[2][0-5][0-5])$這適用於 0-255,這意味着沒有前導零,例如 001

我知道這已經得到解答,但我需要一個類似的正則表達式來進行頁面路由; 1-66 的范圍除外。 這很好用: /^(?!67|68|69)[1-6][0-9]|[1-9]$/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM