2011-05-03 47 views
35

Soy novato con expresiones regulares y quiero utilizar la función preg_match para encontrar si una cadena es una dirección IP.Regex para que coincida con una dirección IP

Por ejemplo, si $string = "45.56.78.222" o algo así, preg_match($regex, $string) debe devolver cierto. Entonces, ¿qué debería ser $regex?

+2

¿Le diste una oportunidad a Google primero? http://www.regular-expressions.info/regexbuddy/ipaccurate.html –

+4

'45.56.78.888' no es una dirección IP. – kapa

+0

@bazmegakapa, sí, me acabo de dar cuenta, lo escribí al azar: D, pero usted entendió el punto;) – ibrahim

Respuesta

105

No utilice una expresión regular cuando no es necesario :)

$valid = filter_var($string, FILTER_VALIDATE_IP); 

Aunque si usted realmente desea una expresión regular ...

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

La expresión regular sin embargo, sólo se validará el formato, el máximo para cualquier octeto es el máximo para un byte sin signo, o 255.

Esta es la razón por IPv6 es necesario - una dirección IPv4 de 32 bits sólo es largo y el Internet es muy popular :)

+17

+1 por 'filter_var' – kapa

+0

¿Filter_var funciona para :: 1 como IP? – super

+1

para una buena IP regex> http://stackoverflow.com/questions/9165922/regex-for-ip-address/20270082#20270082 – Alban

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

debe hacer por su ejemplo (que contiene una cadena que es no una dirección IP). Y, por supuesto, solo es una dirección IPv4.

+0

@alex: Entonces 999.999.999.999 también será una IP válida entonces ?? –

+0

@PratikCJoshi: la pregunta original (que se ha editado años después de mi respuesta) pidió una expresión regular que coincida con cualquier secuencia de cuatro números separados por puntos de hasta 3 caracteres cada uno ... –

+0

Eso es bastante simple, pero nadie querría Dirección IP incorrecta. Considere agregar una dirección IP válida Regex también como respuesta. Ver personas que vienen en esta página considerando que obtendrían Regex por ** Dirección IP ** ** válida, pero no obtienen esa Regex. Gracias –

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]?)$/ 

Este comprobará la gama perfectas, incluyendo si un rango es más alto que 255 desde cualquiera de 4.

Cuestiones relacionadas