我需要一個驗證IP地址的正則表達式模式。這很容易谷歌,但我有一個小捕獲。我需要最後的數字才能接受範圍。所以下面的輸入將被驗證。使用範圍進行IP驗證的正則表達式?
XXX.XXX.XXX.X-Y
所以像168.68.2.1-34
我發現模式在正常的IP地址,但沒有處理範圍。
我需要一個驗證IP地址的正則表達式模式。這很容易谷歌,但我有一個小捕獲。我需要最後的數字才能接受範圍。所以下面的輸入將被驗證。使用範圍進行IP驗證的正則表達式?
XXX.XXX.XXX.X-Y
所以像168.68.2.1-34
我發現模式在正常的IP地址,但沒有處理範圍。
要接受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
。
這並不檢查範圍的開始是否小於結束,但在合理的努力下,這不能在正則表達式中完成。
那麼,這將僅僅是:
(normal-ip-regex)-[0-9]+
如果你需要什麼比這更復雜,那麼我會說你最好的選擇是真正解析出來的數字和驗證他們的方式(例如,如果你想確保「X」小於「Y」,那麼用正則表達式就沒有辦法做到這一點)。
驗證IP地址的「更好」方法是將它們轉換爲整數。記住點符號只是爲了讓人們更容易閱讀。
我不知道你在用什麼語言,但大多數會有類似inet_aton
函數將點符號轉換爲整數(這會隱式檢查格式是否正確)。
將地址作爲整數後,您可以使用與檢查其他整數(最有可能爲<和>)相同的方式檢查它是否在有效範圍內。
Err ..看起來像我誤解了問題,你實際上想要採取一個範圍,而不是檢查一個。那麼這可能不太有用。 – 2010-06-22 06:26:08
這裏有一個小調(但很重要)注意 - 如果'(normal-ip-regex)'以'$'結尾,修改後的正則表達式不會匹配任何內容。 – Kobi 2010-06-22 06:37:06
範圍是不是有界?例如,'123.123.123.123-99999'可能無效,但會被你的正則表達式匹配。 – 2010-06-22 09:33:41