快速入門
教學
工具和語言
範例
參考
書籍評論
範例
正規表示式範例
數字範圍
浮點數
電子郵件地址
IP 位址
有效的日期
數字日期轉文字
信用卡號碼
比對完整行
刪除重複行
程式設計
兩個相近的字詞
陷阱
災難性回溯
過多重複
阻斷服務攻擊
讓所有內容都可選
重複擷取群組
混合 Unicode 和 8 位元
更多本網站資訊
簡介
正規表示式快速入門
正規表示式教學
替換字串教學
應用程式和語言
正規表示式範例
正規表示式參考
替換字串參考
書籍評論
可列印 PDF
關於本網站
RSS Feed 和部落格
RegexMagic—Generate regular expressions matching ip addresses and ranges

如何尋找或驗證 IP 位址

比對 IP 位址是正規表示式複雜度和精確度之間權衡取捨的另一個好範例。 \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b 會完美比對任何 IP 位址。但也會比對 999.999.999.999,好像它是一個有效的 IP 位址。如果你的正規表示式版本支援 Unicode,它甚至可能會比對 ١٢٣.१२३.೧೨೩.๑๒๓。這是否會造成問題,取決於你打算套用正規表示式的檔案或資料。

限制和擷取 IP 位址的四個數字

若要將 IP 位址中的所有 4 個數字限制在 0 到 255 之間,你可以使用下列正規表示式。它會將 IP 位址的 4 個數字儲存到 擷取群組 中。你可以使用這些群組進一步處理 IP 號碼。自由間距模式 允許它符合頁面寬度。

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
  
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
  
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.
  
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

上述正規表示法允許數字 10 到 99 有 1 個前導零,數字 0 到 9 有 2 個前導零。嚴格來說,具有前導零的 IP 位址表示八進位表示法。因此,您可能想要禁止前導零。這需要一個稍長的正規表示法

\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.
  
(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.
  
(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.
  
(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b

限制四個 IP 位址數字而不擷取它們

如果您不需要存取個別數字,您可以使用 量詞 將上述 3 個正規表示法縮短為

\b(?:\d{1,3}\.){3}\d{1,3}\b

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
  
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}
  
(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b

檢查使用者輸入

上述 regex 使用 字詞邊界 來確保 IP 位址中的第一個和最後一個數字不是字母數字字元序列中的一部分。這些 regex 適用於在較長的字串中尋找 IP 位址。

如果您想要驗證使用者輸入,確保字串僅包含 IP 位址,則需要將字詞邊界替換為 字串開頭和字串結尾錨點。如果您的 regex 風格支援,可以使用專用的錨點 \A\z

\A(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
  
(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\z

如果不是,您必須使用 ^$,並確保它們在斷行處比對的選項已關閉

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