2011-12-21 33 views
30

Tôi hơi mới đối với cụm từ thông dụng và đang viết xác thực cho trường số lượng có cụm từ thông dụng cần sử dụng.RegEx: Làm thế nào tôi có thể khớp với tất cả các số lớn hơn 49?

Tôi làm cách nào để khớp với tất cả các số lớn hơn hoặc bằng 50?

tôi đã cố gắng

 
[5-9][0-9]+ 

nhưng điều đó chỉ phù hợp với 50-99. Có cách nào đơn giản để phù hợp với tất cả các số có thể lớn hơn 49? (Chỉ số nguyên được sử dụng)

+1

Có một số lý do bạn không sử dụng regex để trích xuất phần số, sau đó từ đó chuyển đổi nó và kiểm tra dưới dạng số? Có vẻ như nó sẽ đơn giản hơn nhiều. –

+0

Nó cần phải sử dụng regex để phù hợp với hệ thống của chúng tôi. Nó quá dài và phức tạp của một câu chuyện cho khối bình luận này. Không cần phải nói nếu có một cách khác, tôi sẽ sử dụng nó. @ridgerunner chỉ số nguyên được sử dụng. – Maxx

Trả lời

59

Thực tế là chữ số đầu tiên phải được trong khoảng 5-9 chỉ áp dụng trong trường hợp của hai chữ số. Vì vậy, kiểm tra cho rằng trong trường hợp của 2 chữ số, và cho phép nhiều bất kỳ chữ số trực tiếp:

^([5-9]\d|\d{3,})$ 

regexp này đã bắt đầu/kết thúc neo để chắc chắn rằng bạn đang kiểm tra tất cả các chữ số, và chuỗi thực sự đại diện cho một số . | có nghĩa là "hoặc", do đó, [5-9]\d hoặc bất kỳ số nào có từ 3 chữ số trở lên. \d chỉ đơn giản là một phím tắt cho [0-9].

Edit: Để không cho phép số như 001:

^([5-9]\d|[1-9]\d{2,})$ 

Điều này buộc các chữ số đầu tiên là không phải là một zero trong trường hợp của 3 hoặc nhiều chữ số.

+0

Chà, điều này thật hoàn hảo! Cảm ơn bạn rất nhiều. – Maxx

+1

Cảm ơn bạn đã giải thích. Tôi cảm thấy như tôi đã thực sự học được điều gì đó. +1 – Maxx

+0

@pimvdb: Việc bạn sử dụng '^' và '$' sẽ ngụ ý rằng toàn bộ chuỗi là số. Điều này đặt ra câu hỏi, tại sao là một regex cần thiết? –

1

Hãy thử regex này:

[5-9]\d+|\d{3,} 
+0

Kết thúc, nhưng các số như '444' không khớp. – Maxx

+0

Phiên bản cập nhật dường như hoạt động! – Maxx

4

Hãy thử một nhóm có điều kiện phù hợp với 50-99 hoặc bất kỳ chuỗi ba hoặc nhiều chữ số:

var r = /^(?:[5-9]\d|\d{3,})$/ 
17

Tôi biết đã có một câu trả lời tốt được đăng, nhưng nó sẽ không cho phép hàng đầu zero. Và tôi không có đủ uy tín để lại comment, vì vậy ... Đây là giải pháp của tôi cho phép số không hàng đầu:

Trước tiên tôi phù hợp với con số 50 đến 99 (với số không hàng đầu có thể):

0*[5-9]\d 

Sau đó, phù hợp với số lượng 100 trở lên (cũng với số không hàng đầu):

0*[1-9]\d{2,} 

Hãy thêm họ cùng với một "hoặc" và quấn nó lên để phù hợp với toàn bộ câu:

^0*([1-9]\d{2,}|[5-9]\d)$ 

Vậy đó!

1

Next matches tất cả lớn hơn hoặc bằng 11100:

^([1-9][1-9][1-9]\d{2}\d*|[1-9][2-9]\d{3}\d*|[2-9]\d{4}\d*|\d{6}\d*)$ 

For greater or equal50:

^([5-9]\d{1}\d*|\d{3}\d*)$ 

Xem mẫu và sửa đổi cho bất kỳ số. Ngoài ra nó sẽ là tuyệt vời để tìm một số nhà khai thác tiến/lùi đệ quy cho số lượng lớn.

Các vấn đề liên quan