簡體   English   中英

使用正則表達式測試IP地址

[英]Testing an ip address with regex

我正在嘗試測試以下IP地址字符串的有效性,例如:

1.1.1.1/8
15.10.30.100/16
100.10.10.44/24
198.30.20.30/32

並且我有以下正則表達式,用於測試IP的每個項目:

 !/^(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]\/\/(/^\d+)/ig?)$/.test(item.trim())

但是我不確定在帶有正斜杠后跟數字的部分,例如/24/32 ...就是\\/\\/(/^\\d+)/ig 有人可以指出我在這里做錯了什么嗎?

我沒有檢查您的正則表達式中的錯誤,但我在這里工作

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

在這里測試

正則表達式應檢查從0到32的分配塊以及沒有IP4的分配塊。

如果要檢查特定的分配塊,則應使用此分配塊

(?:(?:25[0-5]|[0-2]?[0-4]?[0-9]|[0-1]?[0-9]?[0-9])\.){3}(?:(?:25[0-5]|[0-2]?[0-4]?[0-9]|[0-1]?[0-9]?[0-9]))(?:\/(?:8|16|24|32)|$)

和最后一個嵌套的非捕獲組內的過濾塊(?:8|16|24|32)

在這里測試

您可能在將正則表達式從在線正則表達式測試器粘貼到JS代碼時遇到了麻煩。 但是,這里存在一些問題:1)您有\\/\\/要求//出現在字符串中,2)在模式的結尾附近添加了^錨(並且由於它需要字符串位置的開始,所以它阻止您的正則表達式匹配)。 此外,不需要gi修飾符,只需針對其中沒有字母的模式測試整個字符串。

采用

/^(?: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]?)){3}\/(?:[12]?\d|3[0-2])$/

參見regex演示

在JS中,您可以動態構建模式以提高可讀性:

 var octet = "(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"; var rx = new RegExp("^" + octet + "(?:\\\\." + octet + "){3}/(?:[12]?\\\\d|3[0-2])$"); var strs = [ "1.1.1.1/8", "15.10.30.100/16", "100.10.10.44/24", "198.30.20.30/32", "1.1.1.1/0", "1.1.1.1/32", "1.1.1.1/33"]; for (var s of strs) { console.log(s, "=>", rx.test(s)); } 

圖案細節

  • ^ -字符串的開頭
  • (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) -八位位組模式, 0255
  • (?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3} -3次的:
    • \\. -一個點
    • (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) -八位位組模式
  • \\/ -斜線
  • (?:[12]?\\d|3[0-2]) -可選12后跟任意數字( 029 ,與[12]?\\d匹配),或3后跟從0到數字23032
  • $ -字符串結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM