2012-01-19 13 views
13

Qualcuno può dirmi come posso scrivere Regex per una stringa in modo che la stringa deve e dovrebbe avere alpha+numeric (cioè entrambe le lettere e cifre) caratteri.bisogno di una regex per una stringa che deve avere valori numerici e lettera

valido:

a123sss 
12dfgfd 

non valido:

aaaa 
1111 

Ho provato questo ^[a-zA-Z0-9]*$ ma è sempre dando true.

EDIT: questo è valido anche: 123-abc

+2

sembra che questo problema potrebbe aiutare: http://stackoverflow.com/questions/1051989/regex-for-alphanumeric-but-at-least-one-character – Niklas

+0

È questo invalida o valida: '1234abcd'? – Abel

+0

'ABel' Valido piccolo cambiamento anche io posso ottenere un carattere speciale come' -' puoi darmi per quello – Chaitanya

risposta

31

Sembra come se stai dicendo la stringa richiede che entrambi i caratteri alfabetici e numerici: non può avere solo caratteri alfabetici o solo caratteri numerici.

Così, la stringa deve essere:

  • Uno o più caratteri numerici, seguiti da uno o più caratteri alfabetici, seguita da 0 o più caratteri alfanumerici

o

  • Uno o più caratteri alfabetici, seguiti da uno o più caratteri numerici, seguiti da 0 o più caratteri alfanumerici racters

Così, una regex che funziona è

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

Bella prima risposta, +1. Benvenuto in SO! – stema

+0

Ciao 'Patchi' puoi darlo anche per questo caso' 123-abc' – Chaitanya

+0

Bella risposta davvero. Puoi sostituire '[0-9]' con '\ d' e se vuoi consentire á, ê, ç, ß, ğ, ł, ħ, dž ecc. (Lettere necessarie valide in molti paesi), usa' \ p {L} 'invece di [a-zA-Z]. – Abel

0

Se si desidera semplicemente assicurarsi che contenga sia numeri che lettere (e non si cura se si comprende altri personaggi oltre) si può usare:

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

non so se asp.net supporta lookahead, ma se lo fa, questa regex fa il lavoro:

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

ASP.NET supporta lookahead. Anche questa versione leggermente corta dovrebbe funzionare: '^ (? =. * \ D) (? =. * \ P {L})'. Ma la tua soluzione non consente altri caratteri, come la punteggiatura? – Abel

+0

@Abel: Sì, sei a posto, ho letto male la domanda. Risposta aggiornata – Toto

2

Diverse le possibili buone soluzioni sono già stati pubblicati, ma dal momento che l'OP non specifica cosa alfa e cosa significa numerici, forse una risposta semplificata è la seguente:

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

dove:

  • \d è qualsiasi cifra
  • \p{L} è qualsiasi lettera, incluse le lettere accentate, come à, ç ecc
  • (..) per il raggruppamento, t o evitare la nota osservazione di M42, grazie! (o ripetere il^e $)

Questo corrisponderà a tutti: ßğł123ħdža3b, 123abc. 1a2b3c, ȬȭɓʥɶÂË32 ecc.

+0

Corrisponde a '1a.b' – Toto

+0

@ M42: lo vedo ora, il mio male, risolto, grazie – Abel

+0

: Prego, +1. – Toto

0

Questo funziona:

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

Si cerca sia qualche cifre seguite da pochi caratteri; O pochi caratteri, seguiti da poche cifre. Quindi può esserci un mix di caratteri e cifre o niente.

+0

Mi chiedo perché @Abel ha modificato quasi ogni singola risposta in questo thread? – Serge

+1

Sì, strano eh! Tutti i colori erano sbagliati, ho aggiunto "' a ciascuna risposta per risolvere il problema (non c'è alcuna regex-colorazione). L'ho menzionato nei registri della cronologia, dove puoi vederlo (o ripristinare se non sei d'accordo). Vedi anche: http://meta.stackexchange.com/questions/981/syntax-highlighting-language-hints – Abel

+0

Oh capisco. Grazie allora! – Serge

Problemi correlati