2011-10-13 22 views
11

Ho bisogno di un'espressione regolare per abbinare qualsiasi numero da 0 a 99. Gli zeri iniziali potrebbero non essere inclusi, questo significa che f.ex. 05 non è permesso.Espressione regolare per numeri senza zeri iniziali

So come abbinare 1-99, ma non ottenere lo 0 incluso.

mia espressione regolare per 1-99 è

^[1-9][0-9]?$ 
+0

Questo era un Hai ragione, ma hai appena avuto l'argomento facoltativo '?' sulla seconda cifra invece della prima cifra. –

risposta

9

Aggiornato:

^([0-9]|[1-9][0-9])$ 

Partite 0-99. Non corrisponde ai valori con zeri iniziali. A seconda dell'applicazione, potrebbe essere necessario sfuggire alle parentesi e al simbolo o.

+0

Non vuole zeri iniziali su per esempio '05' (che corrisponde effettivamente a queste espressioni). – aioobe

+0

Ho capito "potrebbe non essere incluso" poiché gli zeri iniziali erano facoltativi. –

+0

Questo non funziona con numeri a cifra singola (ad esempio '9'). Inoltre, potresti anche ridurlo un po ': '^ (0 | [1-9] \ d?) $'. – redbmk

1

[...] ma non si ottiene il 0 incluso.

Basta aggiungere 0|... di fronte l'espressione:

^(0|[1-9][0-9]?)$ 
    ^^ 
+2

Anche l'espressione corrisponde a '05' ... –

+0

[No, non lo è] (http://ideone.com/riqg8). – aioobe

+2

Quello che hai testato non corrisponde alla tua espressione qui. –

3
^(0|[1-9][0-9]?)$ 

test qui http://regexr.com?2uu31 (vari campioni incluso)

È necessario aggiungere un 0|, ma essere consapevoli che la "o" (|) nel regex ha la precedenza più bassa. ^0|[1-9][0-9]?$ in realtà significa (^0)|([1-9][0-9]?$) (ignoreremo che ora ci sono due gruppi di cattura). Quindi significa "la stringa inizia con 0" OPPURE "la stringa termina con [1-9][0-9]?". Un'alternativa all'utilizzo di parentesi è quella di ripetere il ^$, come ^0$|^[1-9][0-9]?$.

+0

Ho provato tutto ma non questo .. :(Perché ho bisogno delle parentesi esterne? Non capisco. – AGuyCalledGerald

+0

@ Jan-FrederikCarl Perché '|' non ha precedenza. Quindi senza parentesi, '^ 0 | [ 1-9] [0-9]? $ == (?:^0) | (?: [1-9] [0-9]? $) '(Dove' (?:) 'È il non catturante gruppo). Ma quello che vuoi è qualcosa di equivalente a '(?:^0 $) | (?:^[1-9] [0-9]? $)' – xanatos

0

Questo dovrebbe fare il trucco:

^(?:0|[1-9][0-9]?)$ 
1

Una risposta più semplice senza utilizzare l'operatore OR rende la cifra iniziale opzionale:

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

Partite 0-99 non permettendo zeri iniziali (01-09) .

12

Ci sono molti modi per farlo, ma qui è un'alternativa per consentire qualsiasi lunghezza numero senza zeri iniziali

0-99:

^(0|[1-9][0-9]{0,1})$ 

0-999 (solo aumentare {0, }):

^(0|[1-9][0-9]{0,2})$ 

1-99:

.210

1-100:

^([1-9][0-9]{0,1}|100)$ 

qualsiasi numero nel mondo

^(0|[1-9][0-9]*)$ 

12 al 999

^(1[2-9]|[2-9][0-9]{1}|[1-9][0-9]{2})$ 
+0

Se voglio aggiungere intervallo tra 12 e 999 quindi quale sarebbe la regex? –

+0

'^ (1 [2-9] | [2-9] [0-9] {1} | [1-9] [0-9] {2}) $' funziona – Guish

0

Prova questo vi aiuterà a

^([0-9]|[1-9][0-9])$ 
Problemi correlati