2010-06-22 72 views
3

我需要一個驗證IP地址的正則表達式模式。這很容易谷歌,但我有一個小捕獲。我需要最後的數字才能接受範圍。所以下面的輸入將被驗證。使用範圍進行IP驗證的正則表達式?

XXX.XXX.XXX.X-Y

所以像168.68.2.1-34

我發現模式在正常的IP地址,但沒有處理範圍。

回答

4

要接受0到255之間的數字,我會使用(25[0-5]|2[0-4]\d|[0-1]?\d{1,2})。調用上述表達式A中,對IP範圍內的正則表達式看起來像

A\.A\.A\.A-A 

(A\.){3}A-A 

如果範圍是可選的,使用(-A)?代替-A

這並不檢查範圍的開始是否小於結束,但在合理的努力下,這不能在正則表達式中完成。

3

那麼,這將僅僅是:

(normal-ip-regex)-[0-9]+ 

如果你需要什麼比這更復雜,那麼我會說你最好的選擇是真正解析出來的數字和驗證他們的方式(例如,如果你想確保「X」小於「Y」,那麼用正則表達式就沒有辦法做到這一點)。

+3

這裏有一個小調(但很重要)注意 - 如果'(normal-ip-regex)'以'$'結尾,修改後的正則表達式不會匹配任何內容。 – Kobi 2010-06-22 06:37:06

+0

範圍是不是有界?例如,'123.123.123.123-99999'可能無效,但會被你的正則表達式匹配。 – 2010-06-22 09:33:41

2

驗證IP地址的「更好」方法是將它們轉換爲整數。記住點符號只是爲了讓人們更容易閱讀。

我不知道你在用什麼語言,但大多數會有類似inet_aton函數將點符號轉換爲整數(這會隱式檢查格式是否正確)。

將地址作爲整數後,您可以使用與檢查其他整數(最有可能爲<和>)相同的方式檢查它是否在有效範圍內。

+0

Err ..看起來像我誤解了問題,你實際上想要採取一個範圍,而不是檢查一個。那麼這可能不太有用。 – 2010-06-22 06:26:08

相關問題