2011-01-21 25 views
30

Ho bisogno di un'espressione regolare che richiede almeno UN numero e SIX massimo.Espressione regolare a 6 cifre

Ho lavorato a questo, ma nessuno di loro sembra funzionare.

^[0-9][0-9]\?[0-9]\?[0-9]\?[0-9]\?[0-9]\?$ 

^[0-999999]$ 

Qualsiasi altro suggerimento?

risposta

81

È possibile utilizzare gamma quantifier {min,max} per specificare minimo di 1 cifra e un massimo di 6 cifre come:

^[0-9]{1,6}$ 

Spiegazione:

^  : Start anchor 
[0-9] : Character class to match one of the 10 digits 
{1,6} : Range quantifier. Minimum 1 repetition and maximum 6. 
$  : End anchor 

Perché tuo regex non funziona?

Si erano quasi vicino alla regex:

^[0-9][0-9]\?[0-9]\?[0-9]\?[0-9]\?[0-9]\?$ 

Dal momento che si era sfuggito il ? facendolo precedere con la \, il ? non era altro che agisce come un meta-character regex (per 0 o 1 ripetizioni) ma veniva trattato letteralmente.

Per risolvere basta rimuovere il \ e ci sei.

See it on rubular.

Il regex basato su quantificatore è più breve, più leggibile e può essere facilmente esteso a qualsiasi numero di cifre.

vostra seconda regex:

^[0-999999]$ 

è equivalente a:

^[0-9]$ 

che corrisponde stringhe esattamente una cifra. Sono equivalenti perché una classe di caratteri [aaaab] è uguale a [ab].

+5

+1 per la spiegazione estesa –

+1

Proprio come suggerisce il titolo, è possibile aggiungere una nota che per abbinare un numero di 6 cifre, si dovrebbe usare '[0-9] {6}' e aggiungere ancore se necessario. –

3

^[0-9]{1,6}$ dovrebbe farlo. Non conosco VB.NET abbastanza bene da sapere se è lo stesso lì.

Per esempi, dare un'occhiata allo Wikipedia.

+0

Ti manca l'ancora di estremità. – codaddict

15
^\d{1,6}$ 

....................

+1

corto e dolce. Ho usato una variazione di questo \ d {7,7} con la funzione Trova/Sostituisci TextFX di Notepad ++ per ottenere tutti i 7 numeri numerici in un file. molte grazie per avermi portato alla soluzione di cui avevo bisogno. –

+4

Poiché '\ d' e' [0-9] 'non sono sempre gli stessi [(vedi questo post)] (http://stackoverflow.com/q/890686/1447415),'^[0-9] {1,6} $ 'la soluzione potrebbe essere preferibile. – Johan

+0

Semplice ed efficace. – ksooklall

6

Si potrebbe provare

^[0-9]{1,6}$ 

dovrebbe funzionare.