È 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]
.
+1 per la spiegazione estesa –
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. –