2011-05-03 95 views
35

我是新手與正則表達式,我想用preg_match函數來查找一個字符串是否是IP地址。正則表達式匹配的IP地址

例如,如果$string = "45.56.78.222"或類似的東西,preg_match($regex, $string)應該返回true。那麼,$regex應該是什麼?

+2

您是否首先嚐試Google? http://www.regular-expressions.info/regexbuddy/ipaccurate.html – 2011-05-03 06:28:30

+4

'45.56.78.888'不是IP地址。 – kapa 2011-05-03 06:39:43

+0

@bazmegakapa是的我剛剛意識到,我隨機寫道:D,但你有我認爲的觀點;) – ibrahim 2011-05-03 06:54:51

回答

105

不要使用正則表達式時,你不需要:)

$valid = filter_var($string, FILTER_VALIDATE_IP); 

但如果你真的想要一個正則表達式...

$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string); 

正則表達式但是隻會驗證格式,任何八位字節的最大值是無符號字節的最大值,或255

這就是爲什麼IPv6是必要的 - IPv4地址只有32位長,互聯網是受歡迎:)

+17

+1'filter_var' – kapa 2011-05-03 06:39:21

+0

filter_var是否適用於:: 1作爲IP? – super 2014-06-03 10:11:55

+1

for good IP regex> http://stackoverflow.com/questions/9165922/regex-for-ip-address/20270082#20270082 – Alban 2014-07-28 16:15:30

9
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ 

應該爲你做例子(其中確實包含一個字符串, IP地址)。當然,這只是一個IPv4地址。

+0

@alex:那麼999.999.999.999也是有效的IP那麼!! ?? – 2015-12-08 17:57:44

+0

@PratikCJoshi:最初的問題(在我的答案後多年編輯)要求一個正則表達式,它可以匹配任意四個以點號分隔的數字,每個數字最多可包含3個字符... – 2015-12-08 18:25:50

+0

這相當簡單,但沒有人願意錯誤的IP地址。請考慮添加有效的IP地址Regex作爲答案。看到有人來到這個頁面,考慮到他們會得到正確的** IP地址正則表達式,但他們沒有得到這個正則表達式。謝謝 – 2015-12-08 18:29:15

4
/^(?:(?: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]?)$/ 

這將檢查完美範圍包括如果範圍爲高於255從任何的4.