2012-01-19 15 views
13

Puede alguien decir cómo puedo escribir Regex para una cadena para que la cadena tiene y debe tener alpha+numeric (es decir, letras y dígitos) caracteres.Necesidad de una expresión regular para una cadena que debe tener tanto caracteres numéricos como carta

Válido:

a123sss 
12dfgfd 

no válido:

aaaa 
1111 

yo probamos este ^[a-zA-Z0-9]*$ pero siempre está dando true.

EDIT: esto también es válido: 123-abc

+2

Parece que esta pregunta podría ayudarlo: http://stackoverflow.com/questions/1051989/regex-for-alphanumeric-but-at-least-one-character – Niklas

+0

¿Es esto inválido o válido: '1234abcd'? – Abel

+0

'ABel' Válido cambio pequeño incluso puedo obtener un carácter especial como' -' ¿me puede dar ese – Chaitanya

Respuesta

31

Suena como si estuviera diciendo la cadena requiere que ambos caracteres alfabéticos y numéricos: no puede tener sólo caracteres alfabéticos, o sólo caracteres numéricos.

De este modo, la cadena debe ser:

  • Uno o más caracteres numéricos, seguido de uno o más caracteres alfabéticos, seguido por 0 o más caracteres alfanuméricos

o

  • Uno o más caracteres alfabéticos, seguidos de uno o más caracteres numéricos, seguidos de 0 o más caracteres alfanuméricos racters

Por lo tanto, una expresión regular que funciona es

^([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*$ 
+3

Bonita primera respuesta, +1. Bienvenido a SO! – stema

+0

Hola 'Patchi' ¿Puedes darlo para este caso también' 123-abc' – Chaitanya

+0

Buena respuesta de hecho. Puede reemplazar '[0-9]' con '\ d' y si desea permitir á, ê, ç, ß, ğ, ³, ħ, dž etc. (letras válidas necesarias en muchos países), use' \ p {L} 'en lugar de [a-zA-Z]. – Abel

0

Si simplemente quiere asegurarse de que contiene números y letras (y no le importa si incluye otros personajes también) se puede utilizar:

/\[0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+/ 
1

no sé si es compatible con asp.net búsqueda hacia delante, pero si lo hace, esta expresión regular hace el trabajo:

^(?=.*[0-9])(?=.*[a-zA-Z])[a-zA-Z0-9]+$ 
+0

ASP.NET admite búsqueda anticipada. Esta versión ligeramente corta también debería funcionar: '^ (? =. * \ D) (? =. * \ P {L})'. Pero, ¿su solución no permite otros caracteres, como la puntuación? – Abel

+0

@Abel: Sí, estás correcto, he leído mal la pregunta. Respuesta actualizada – Toto

2

Varias buenas soluciones posibles ya se han publicado, pero ya que el PO no especifica qué alfa y qué medios numéricos, tal vez una respuesta simplificada es la siguiente:

^(\d+\p{L}+|\p{L}+\d+)+$ 

donde:

  • \d es cualquier dígito
  • \p{L} es cualquier letra, incluyendo letras acentuadas, como la a, C, etc.
  • (..) para agrupar, t o evitar la observación notoria de M42, ¡gracias! (o repita el^y $)

Esto coincidirá con todos: ßğł123ħdža3b, 123abc. 1a2b3c, ȬȭɓʥɶÂË32 etc.

+0

Esto no coincide con '1a.b' – Toto

+0

@ M42: Lo veo ahora, mi mal, lo arreglé, gracias – Abel

+0

: De nada, +1. – Toto

0

Esto funciona:

^(\d+[A-Za-z_-]+|[A-Za-z_-]+\d+)[A-Za-z_-\d]*$ 

Se busca en cualquiera de pocos dígitos seguidos de unos personajes; O pocos caracteres, seguidos de algunos dígitos. Entonces puede haber cualquier combinación de caracteres y dígitos, o nada.

+0

Me pregunto por qué @Abel ha editado casi todas las respuestas en este hilo? – Serge

+1

Sí, extraño, ¡eh! Todo el coloreado fue incorrecto, agregué '' a cada respuesta para solucionarlo (no hay coloreado regex). Lo mencioné en los registros de historial, donde puedes ver eso (o revertir si no estás de acuerdo). También vea: http://meta.stackexchange.com/questions/981/syntax-highlighting-language-hints – Abel

+0

Oh, ya veo. ¡Gracias, entonces! – Serge

Cuestiones relacionadas