[英]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.