2009-04-18 11 views
5

Actualmente tengo algunos antecedentes teóricos en expresiones regulares, pero casi nunca los he usado.¿Es una buena práctica usar expresiones regulares para la validación de entrada?

Estoy tratando de desarrollar algunas clases para la validación de entrada general, y he estado escribiendo métodos sin usar expresiones regulares. Recientemente leí this el artículo de Jeff, y ahora me pregunto si debería refactorizar algunos de los métodos para incluir expresiones regulares dentro de ellos.

Pensé que las expresiones regulares se usaban para construir front-ends para aplicaciones como analizadores sintácticos y cualquier otra cosa, pero aparentemente se usan para mucho más que eso.

Me doy cuenta de que no todas las validaciones pueden o deben hacerse con expresiones regulares, pero ¿son una buena práctica para validar las entradas?

Respuesta

5

Las expresiones regulares son solo una forma de hacer coincidir el texto con un patrón. Hay otras maneras de hacer lo mismo sin usar una expresión regular. No debe pensar en expresiones regulares como una palabra de moda que debe incluir en su código. Usa la herramienta que funcione mejor.

Para validación de entrada, asegúrese de que las herramientas que esté utilizando le permitan especificar exactamente qué tipo de texto desea aceptar y rechazar todo lo demás de forma predeterminada. Las expresiones regulares le permiten hacer esto de forma fácil y concisa para ciertos tipos de información, por lo que muchas personas las usan.

2

me di cuenta que no todas las validaciones pueden o deben hacer con expresiones regulares

Usted es exactamente correcto en que uno, pero por cosas que necesitan ser exactamente una manera determinada (por ejemplo, sociales números de seguridad, números de teléfono (hasta cierto punto) y correos electrónicos), usando expresiones regulares pueden ser útiles.

Pero no confíe en ellos. Por ejemplo, tengo un chequeo de expresión regular de correo electrónico bastante bueno, pero también tengo una lista de dominios obviamente falsos (example.com y algunos otros que he visto en nuestra base de datos (principalmente cosas locales)) para comparar.

1

Sí, las expresiones regulares funcionan muy bien para la validación de entrada. Sin embargo, muchas veces es una muy buena idea abstraer estas cosas tanto como sea posible como otros métodos, o incluso a veces objetos validador especiales.

Recuerde que las expresiones regulares a menudo pueden presentar muchos problemas, pero en general, la validación de entrada es un caso donde brillan bastante incondicionalmente.

0

No sé si lo llamaría una buena práctica, pero ciertamente utilizo expresiones regulares para la validación de cosas como direcciones de correo electrónico y operaciones, entre otras cosas. Si no es una mejor práctica, sin duda es una práctica común.

4

Sí!

Las expresiones regulares generalmente le permiten construir una validación de entrada bastante sólida que es bastante legible en un espacio de tiempo muy corto.

Algo que hace el trabajo correcto, se puede mantener y le permite obtener otras cosas es bueno en mis libros.

Como siempre, aplica el sentido común y si una expresión regular es una mala herramienta para el trabajo, no la use.

4

Usar la validación de expresión regular es una buena idea siempre que no se ramifican en aplicación de más de expresiones regulares Bešić:

Si usted se encuentra validación de estructuras potencialmente complejas tales como Michael Ash hace en su intento de verificar una fecha usted está fuera de lo común y buscar problemas:

^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$ 

Su código sufrirá problemas de mantenimiento.

1

La respuesta a su pregunta realmente depende del propósito de su código. Sí, las expresiones regulares son geniales y estoy de acuerdo, con todas las respuestas anteriores (que he leído).

El uso de expresiones regulares, es una forma práctica, rápida e inteligente de validar ciertas entradas pero quizás lo que necesita para recordar qué es lo que hace que el código sea bueno y aplicar las expresiones regulares en los lugares correctos. Leí el artículo que publicaste, y pensé que el tema era más sobre usar expresiones regulares de la manera correcta, es decir, no las usaras solo para una solución porque sabes que será rápido escribir y funcionará pero en turn produce un código que parece ilegible, largo y horrible.

No tomaría de lo que está escrito que las expresiones regulares son "malas prácticas". ¡Supongo que solo quería decir que a veces puedes dedicar unos minutos más al diseño y crear un mejor concepto para implementar o simplemente concluir que las expresiones regulares son ese concepto!

0

Debe validar tanto en el lado del cliente como del servidor. Las expresiones regulares son muy buenas para asegurarse de que una cadena tenga un formato válido (por ejemplo, direcciones de correo electrónico, números de teléfono, etc.), pero el servidor no debe depender únicamente de eso. El servidor debe verificar por sí mismo y también validar la corrección comercial (por ejemplo, como la respuesta anterior que verificó las direcciones falsas en una base de datos).

Una vez no es suficiente. Hay diferentes grados de "válido".

0

Si la entrada que está validando está en un idioma normal, una expresión regular es la herramienta correcta para validarla.

Cuestiones relacionadas