2011-10-13 42 views
11

Tôi cần cụm từ thông dụng để khớp với bất kỳ số nào từ 0 đến 99. Không thể bao gồm các số 0 ở đầu, điều này có nghĩa là f.ex. 05 không được phép.Cụm từ thông dụng cho các số không có số 0 đứng đầu

Tôi biết cách khớp 1-99, nhưng không được đưa vào giá trị 0.

biểu hiện thường xuyên của tôi cho 1-99 là

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

này là một ở bên phải, nhưng bạn chỉ có đối số tùy chọn '?' trên chữ số thứ hai thay vì chữ số hàng đầu. –

Trả lời

9

Cập nhật:

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

Matches 0-99. Không khớp giá trị với các số 0 đứng đầu. Tùy thuộc vào ứng dụng của bạn, bạn có thể cần phải thoát khỏi dấu ngoặc đơn và biểu tượng.

+0

Ông doen't muốn các số 0 đứng đầu, ví dụ '05' (mà biểu thức này thực sự khớp). – aioobe

+0

Tôi hiểu "có thể không được bao gồm" vì số 0 đứng đầu là tùy chọn. –

+0

Điều đó không hoạt động đối với các số có một chữ số (ví dụ: '9'). Ngoài ra, bạn cũng có thể thu nhỏ nó xuống một chút: '^ (0 | [1-9] \ d?) $'. – redbmk

1

[...] nhưng không nhận được 0 bao gồm.

Chỉ cần thêm 0|... ở phía trước của biểu thức:

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

Biểu thức của bạn khớp với '05' quá ... –

+0

[Không, nó không] (http://ideone.com/riqg8). – aioobe

+2

Nội dung bạn đã thử nghiệm không khớp với biểu thức của bạn ở đây. –

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

thử nghiệm ở đây http://regexr.com?2uu31 (mẫu khác nhau bao gồm)

Bạn cần phải thêm một 0|, nhưng lưu ý rằng "hoặc" (|) trong Regexes có độ ưu tiên thấp nhất. ^0|[1-9][0-9]?$ trong thực tế có nghĩa là (^0)|([1-9][0-9]?$) (chúng tôi sẽ bỏ qua rằng bây giờ có hai nhóm chụp). Vì vậy, nó có nghĩa là "chuỗi bắt đầu với 0" HOẶC "chuỗi kết thúc bằng [1-9][0-9]?". Cách thay thế để sử dụng dấu ngoặc vuông là lặp lại số ^$, như ^0$|^[1-9][0-9]?$.

+0

Tôi đã thử tất cả mọi thứ nhưng không phải điều này .. :(Tại sao tôi cần các dấu ngoặc bên ngoài? Tôi không hiểu. – AGuyCalledGerald

+0

@ Jan-FrederikCarl Vì '|' có ưu tiên không có gì. Vì vậy, không có dấu ngoặc đơn, '^ 0 | [ 1-9] [0-9]? $ == (?:^0) | (?: [1-9] [0-9]? $) '(Trong đó' (?:) 'Là không bắt Nhưng những gì bạn muốn là một cái gì đó tương đương với '(?:^0 $) | (?:^[1-9] [0-9]? $)' – xanatos

0

này nên làm như lừa:

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

Một câu trả lời đơn giản hơn mà không sử dụng hoặc nhà điều hành làm cho chữ số hàng đầu tùy chọn:

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

Matches 0-99 không cho phép dẫn Zero (01-09) .

12

Có rất nhiều cách để làm điều đó nhưng đây là một sự thay thế cho phép bất kỳ độ dài của số không số không hàng đầu

0-99:

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

0-999 (chỉ tăng {0, }):

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

1-99:

.210

1-100:

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

Bất kỳ số trên thế giới

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

12 để 999

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

Nếu tôi muốn thêm khoảng từ 12 đến 999 thì những gì sẽ là regex? –

+0

'^ (1 [2-9] | [2-9] [0-9] {1} | [1-9] [0-9] {2}) $' hoạt động – Guish

0

Hãy thử điều này nó sẽ giúp bạn

^([0-9]|[1-9][0-9])$ 
Các vấn đề liên quan