.net - expresión - expresiones regulares para alfanumérico, pero al menos un carácter
expresiones regulares para contraseñas java (6)
En mi página asp.net, tengo un cuadro de entrada que debe tener la siguiente validación:
Debe ser alfanumérico, con al menos 1 carácter (es decir, no puede ser TODOS los números).
La mayoría de las respuestas a esta pregunta son correctas, pero hay una alternativa que (en algunos casos) ofrece más flexibilidad si desea cambiar las reglas más adelante:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$
Esto coincidirá con cualquier secuencia de caracteres alfanuméricos, pero solo si el primer grupo también coincide con toda la secuencia. Es un truco poco conocido en expresiones regulares que le permite manejar algunos problemas de validación muy difíciles.
Por ejemplo, supongamos que necesita agregar otra restricción: la cadena debe tener entre 6 y 12 caracteres. Las soluciones obvias publicadas aquí no funcionarán, pero al usar el truco de anticipación, la expresión regular simplemente se convierte en:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
^/d*[a-zA-Z][a-zA-Z0-9]*$
Básicamente esto significa:
- Cero o más dígitos ASCII;
- Un carácter alfabético ASCII;
- Cero o más caracteres ASCII alfanuméricos.
Pruebe algunas pruebas y verá que esto pasará cualquier cadena ASCII alfanumérica donde se requiere al menos un carácter ASCII no numérico.
La clave para esto es la /d*
en el frente. Sin él, la expresión regular se vuelve mucho más incómoda de hacer.
^/w*[/p{L}]/w*$
Este no es tan difícil. La expresión regular lee: coincide con una línea que comienza con cualquier número de caracteres de palabras (letras, números, puntuación (que es posible que no desee)), que contiene un carácter de letra (que es la parte [/p{L}]
en el centro) , seguido de cualquier número de caracteres de palabra otra vez.
Si quieres excluir la puntuación, necesitarás una expresión más fuerte:
^[/p{L}/p{N}]*[/p{L}][/p{L}/p{N}]*$
Y si no te importa Unicode, puedes usar una expresión aburrida:
^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
^[0-9]*[A-Za-z][0-9A-Za-z]*$
es la expresión regular que hará lo que buscas. Las letras ^ y $ coinciden con el inicio y el final de la palabra para evitar que otros caracteres. Podría reemplazar el bloque [0-9A-z] con / w, pero prefiero una forma más detallada porque es más fácil de extender con otros caracteres si lo desea.
Agregue un validador de expresiones regulares a su página asp.net según el tutorial en MSDN: http://msdn.microsoft.com/en-us/library/ms998267.aspx .
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$
Puede ser
- cualquier número terminó con un personaje,
- o una expresión alfanumérica comenzada con un carácter
- o una expresión alfanumérica iniciada con un número, seguida de un carácter y terminada con una subexpresión alfanumérica
^[/p{L}/p{N}]*/p{L}[/p{L}/p{N}]*$
Explicación:
-
[/p{L}/p{N}]*
coincide con cero o más letras o números de Unicode -
/p{L}
coincide con una letra -
[/p{L}/p{N}]*
coincide con cero o más letras o números de Unicode -
^
y$
anclan la cadena, asegurando que la expresión regular coincida con toda la cadena. Puede omitir estos, según la función de coincidencia de expresiones regulares que llame.
Resultado: puede tener cualquier cadena alfanumérica, excepto que tiene que haber una letra en alguna parte.
/p{L}
es similar a [A-Za-z]
excepto que incluirá todas las letras de todos los alfabetos, con o sin acentos y marcas diacríticas. Es mucho más inclusivo, utilizando un conjunto más grande de caracteres Unicode. Si no quieres esa flexibilidad, sustituye [A-Za-z]
. Una observación similar se aplica a /p{N}
que podría reemplazarse por [0-9]
si desea que sea sencillo. Consulte la página de MSDN sobre clases de caracteres para obtener más información.
La versión menos sofisticada de Unicode sería
^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$