2011-07-14 64 views
5

Estoy haciendo una aplicación que usa una dirección IP. Tengo que validarlos que empezar desde al menos 1.0.0.1 pero con los códigos debajo de ella acepta 0.0.0.0:Cómo validar una dirección IP en C#

\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 

También intenté cambiar a:

\b(25[0-5]|2[0-4][0-9]|[01]?[1-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 

Este código no acepta 0.0.0.0 pero tampoco acepta 100.0.0.0 a 109.0.0.0.

¿Alguien puede ayudar?

+0

favor aprender cómo dar formato a sus preguntas correctamente. –

+0

-1 por no explicar que está utilizando expresiones regulares (si eso es lo que es). ¿Qué es "bt"? ¿Por qué el formato es tan pobre? Lea esto: http://stackoverflow.com/editing-help – spender

+0

El uso de Regex para este tipo de validación parece innecesariamente agotador. ¿Por qué no dividir por '.' y validar cada parte de la dirección IP de una manera más convencional? – spender

Respuesta

1

¡Ahórrate el dolor! Convierta en una cadena, divida el carácter de punto y compruebe si cada uno de los 4 segmentos está en el rango 0 o 1 a 255.

De lo contrario, si utiliza RegexBuddy (que es una aplicación fantástica para RegEx) tiene un montón de ejemplos de direcciones IP en la Biblioteca inc para 0.0.0.0 a 255.255.255.255:

\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 
10

uso

IPAddress addr = IPAddress.TryParse(str); 

Entonces, si eso funcionó obtener los números usando

addr.GetAddressBytes(); 

y luego verifique los valores de byte para las condiciones correctas usando if-cases normales.

+2

bye la forma en que también valida 1 como verdadero y establece el ipaddress en 0.0.0.1 –

+0

Sí "1" es una dirección IP válida, lo que significa 0.0.0.1 –

+2

Yap para expertos en redes podría ser comprensible, pero la validación en el cuadro de texto de entrada en una aplicación para usuarios no profesionales no es deseada. –

0

Trate de usar esto,

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";