2011-05-05 42 views
5

¡Tengo este código en PowerShell y no funciona! ¿alguna ayuda?usando la expresión regular para validar la dirección IP en Powershell?

yo sólo lo necesitan para asegurarse de que la cadena es una dirección IP de trabajo no 999.999.999.999 o una cadena normal de

sólo una IP [0 .... 255]. [0 .... 255] .. [0 .... 255] [0 .... 255]

if ($newIP -match "(\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)") { $x = $True} 

aplausos

+2

puede encontrar un montón de coincidencias para la dirección IP mediante Google o directamente aquí en stackoverflow. Ver [__here__] (http://www.regular-expressions.info/examples.html) para la coincidencia formal (llamada también _complex beast_ :) –

Respuesta

19

¿Qué tal:

[bool]($newIP -as [ipaddress]) 
+0

Eso es asombroso ... – Tao

+0

Mucho más fácil que las expresiones regulares :) – stej

+0

sí, gracias asignar :-) –

1

Aquí está una más compacto uno:

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

0

o incluso más corto

^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$

+0

Quería agregar que he estado usando este IPRegex y lo he probado contra cientos de direcciones IP . Funciona a las mil maravillas. –

+0

¿Qué? Básicamente, esto significa que acepta cualquier combinación de 1 a 3 dígitos y tiene un período entre ellos ... – Joseph

-2

El siguiente no funcionará^(:?. [0-9] {1,3}) {3} [0 -9] {1,3} $ Tome por ejemplo la parte que necesita para coincidir con el último octeto de la dirección IP [0-9] {1,3} - Esto no coincidirá solo con el número en el intervalo de 0 a 255 Su mejor enfoque será bucear comprobando un solo octeto a 250 a 255; 240 a 249; 100 a 199; 10 a 99; y 0 a 99.

+1

No hay una palabra en la pregunta principal que^(?: [0-9] {1,3}.) {3} [ 0-9] {1,3} $ debería funcionar. En lugar de escribir lo que no funcionará, intente escribir lo que será con algunos ejemplos adecuados. – pen2

Cuestiones relacionadas