2010-06-08 27 views
6

Estoy tratando de utilizar un RegularexpressionValidator para que coincida con una dirección IP (con posibles comodines) para un sistema de filtrado de IP.Expresión regular para que coincida con la dirección IP + comodín

estoy usando la siguiente expresión regular:

"([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}" 

que funciona muy bien cuando se ejecuta en LINQPad con Regex.Matches, pero no parece funcionar cuando estoy usando el validador.

¿Alguien tiene alguna sugerencia sobre una Regex mejor o por qué funcionaría en la prueba pero no in situ?

Cheers, Ed

+0

¿Puede dar algunos casos de prueba en el que no coincide correctamente? – VeeArr

+0

@VeeArr Todavía tengo que validarlo correctamente, por lo que cualquier cadena arbitraria, incluidas las direcciones IP: D –

Respuesta

3

asp:RegularExpressionValidator no requiere que hacer doble escape de barras invertidas. Usted debe tratar:

([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}

+0

¡Salud, amigo! :) –

1

¿Qué hay de poner caracteres de inicio y final de cadena en la expresión

^([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}$ 
+0

¡Una sugerencia agradable, pero me temo que todavía no valida! –

2

[0-9] {1,3} permitiría a las direcciones IP de forma 999.999.999.999. Su rango de direcciones IP debe permitir solo 0-255.
Reemplazar todas las ocurrencias de [0-9] {1,3} con ([0-9] {1,2}) | (1 [0-9] {2,2}) | (2 [0- 4] [0-9]) | (25 [0-5])
Esto me parece muy complicado, y probablemente haya mejores formas de hacerlo, pero parece correcto a primera vista.

+1

No me preocupa mucho que la dirección IP sea válida, solo el formato (es más fácil de analizar más adelante), pero el punto es importante. –

5

Esto: \\.|\\*\\. parece el bit dudoso. Hacer esto en su lugar:

@"^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$" 

Y sólo para aceptar 0-255 (gracias, apoorv020):

^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$ 
+0

Otra buena sugerencia, pero me temo que eso tampoco funciona. –

+0

Lo hace - pruébalo en http://gskinner.com/RegExr/. Asegúrate de tener una '@' delante de la cadena. Si aún no funciona, muéstrenos el código que está usando para que coincida. Tenga en cuenta que estoy tratando de hacerla coincidir con cosas como '192.168. *. * Y' 10. *. *. * '- ¿Esto es lo que quiere?¿Puedes mostrarnos algunos casos de prueba? –

+0

No creo que hayas leído mi pregunta del todo bien: mi Regex original coincidirá con una dirección IPv4 con comodines sin preocupaciones, pero no funcionará en un asp: RegularExpressionValidator. Tu Regex tiene exactamente el mismo problema. –

0

Mi respuesta es general para .NET, no específico de RegularExpressionValidator.

cadena de expresión regular para coincidir IP (utilizar ExplicitCapture para evitar la captura inútil y mantener RE concisa):

"\\b0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})(\\.0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})){3}\\b" 

Dependiendo particular, caso de uso es posible que desee agregar los anclajes apropiados, es decir, \A o ^ al principio y \Z o $ al final. Luego puede eliminar el requisito de límite de palabras: \b.

(Recuerde de duplicar \ dentro de la cadena)

Cuestiones relacionadas