2011-10-13 61 views
11

我需要一個正則表達式來匹配0到99之間的任何數字。可能不包含前導零,這意味着f.ex. 05是不允許的。沒有前導零的數字的正則表達式

我知道如何匹配1-99,但不包括0。

我爲1-99的正則表達式是

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

這曾經是一個最右邊的,但你只是有你的可選參數'?'在第二位數字而不是前導數字。 –

回答

9

更新時間:

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

匹配0-99。與前導零不匹配的值。根據您的應用程序,您可能需要跳過括號和或符號。這裏

+0

他不希望前導零例如'05'(這個表達式實際上匹配)。 – aioobe

+0

我明白「可能不包含」,因爲前導零是可選的。 –

+0

這不適用於單個數字(例如'9')。另外,你也可以將它縮小一點:'^(0 | [1-9] \ d?)$'。 – redbmk

1

[...],但沒有得到0包括在內。

只是在表達前面加0|...

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

您的表情也與'05'匹配... –

+0

[不,]不(http://ideone.com/riqg8)。 – aioobe

+2

您測試的內容與您在這裏的表達不符。 –

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

測試http://regexr.com?2uu31(各種樣品含)

您必須添加一個0|,但要注意的是,「或」(|)中的正則表達式具有最低的優先級。 ^0|[1-9][0-9]?$在現實中意味着(^0)|([1-9][0-9]?$)(我們將忽略那個現在有兩個捕獲組)。所以它的意思是「字符串以0開頭」或「字符串以[1-9][0-9]?結尾」。使用括號的替代方法是重複^$,如^0$|^[1-9][0-9]?$

+0

我嘗試了一切,但沒有這樣做。:(爲什麼我需要外括號?我不明白。 – AGuyCalledGerald

+0

@ Jan-FrederikCarl因爲'|'沒有優先級,所以沒有括號,'^ 0 | [ 1-9] [0-9]?$ ==(?:^ 0)|(?:[1-9] [0-9]?$)'(其中'(?:)'是非捕獲但是你想要的東西等於'(?:^ 0 $)|(?:^ [1-9] [0-9]?$)' – xanatos

0

這應該做的伎倆:

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

不使用或操作員一個簡單的回答讓前面的數字可選:

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

較量0-99禁止前導零(01-09) 。

12

有很多方法可以做到這一點,但這裏是另一種允許任何數量的長度沒有前導零

0-99:

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

0-999(只是增加{0,}):

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

1-99:

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

1-100:

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

世界上任何一個號碼

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

12至999

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

如果我想在12到999之間添加範圍,那麼正則表達式是什麼? –

+0

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

0

試試這個它會幫助你

^([0-9]|[1-9][0-9])$ 
相關問題