2011-10-13 39 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])$ 
相关问题