2016-01-05 79 views
1

我需要一個正則表達式,其中包含:1-3個數字和可選的點。這就像IP模式。我希望我的正則表達式來允許:PHP的正則表達式 - 類似於IP模式?

192.168

192.168。

如下:

192.1688

這是我到目前爲止有:

preg_match('/^((\d{1,3})(\.?))+$/', $string); 

但它仍然讓我有超過3個位數。任何建議如何修復正則表達式?

+1

['^([0-9] {1,3 } \。)*([0-9] {1,3} \。?)$'](https://regex101.com/r/kV7zW5/1) – Tushar

+0

也許['^ \ d {1,3} (?:\。\ d {1,3})* \ $'](https://regex101.com/r/vC9yX0/1)。?應該支持多少個數字組?你需要的數字在IP和IP地址範圍之間的範圍是0到255嗎?試試['^(?: 25 [0-5] | 2 [0-4] [0-9] | [01]?[1-9] [0-9]?)(?:\。(?: 25 [0-5] | 2 [0-4] [0-9] | [01] [1-9] [0-9]))* \ $'](HTTPS:???// regex101。 com/r/vC9yX0/2)。 –

+0

嘿@stribizhev,你認爲我的正則表達式應該/將會工作 – Tushar

回答

3

如果打算以匹配任何數目的1-3的點(這是可選的在端部)隔開的數字序列的,則可以使用

^\d{1,3}(?:\.\d{1,3})*\.?$ 

參見demo

如果需要的數字是在爲IP地址0255之間的範圍內,使用

^(?:25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?))*\.?$ 

見另一demo

要限制到只有2組號碼,使用一個?量詞與第二非捕獲組:

^(?:25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[1-9][0-9]?))?\.?$ 
                        ^

參見the 3rd demo

+0

這正是我想要的。謝謝! :) –

+0

@YasenIvanov我見過他讀OP的頭腦:) – Tushar

+0

嗯,這一次它是一個全或無的遊戲:) –