2011-01-21 45 views
30

Tôi cần cụm từ thông dụng yêu cầu ít nhất MỘT chữ số và tối đa SIX.6 chữ số biểu thức chính quy

Tôi đã tìm ra điều này, nhưng không có cách nào trong số đó có hiệu quả.

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

^[0-999999]$ 

Có đề xuất nào khác không?

Trả lời

81

Bạn có thể sử dụng phạm vi lượng hóa {min,max} để xác định tối thiểu là 1 chữ số và tối đa là 6 chữ số như:

^[0-9]{1,6}$ 

Giải thích:

^  : Start anchor 
[0-9] : Character class to match one of the 10 digits 
{1,6} : Range quantifier. Minimum 1 repetition and maximum 6. 
$  : End anchor 

Tại sao regex của bạn không hoạt động?

Bạn đã gần như đóng trên regex:

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

Vì bạn đã thoát khỏi ? bằng cách đặt trước nó với \, các ? không diễn xuất hơn là một siêu nhân vật regex (ví 0 hoặc 1 lặp lại) nhưng đã được xử lý theo nghĩa đen.

Để khắc phục, chỉ cần xóa \ và bạn đang ở đó.

See it on rubular.

Regex định lượng dựa trên ngắn hơn, dễ đọc hơn và có thể dễ dàng mở rộng đến bất kỳ số chữ số nào.

regex thứ hai của bạn:

^[0-999999]$ 

tương đương với:

^[0-9]$ 

mà phù hợp với chuỗi với đúng một chữ số. Chúng tương đương nhau bởi vì một lớp nhân vật [aaaab] giống như [ab].

+5

+1 cho lời giải thích mở rộng –

+1

Giống như tiêu đề gợi ý, một ghi chú có thể được thêm vào để khớp với số có 6 chữ số, bạn nên sử dụng '[0-9] {6}', và thêm neo nếu cần. –

3

^[0-9]{1,6}$ nên làm điều đó. Tôi không biết VB.NET đủ tốt để biết nếu nó giống nhau ở đó.

Ví dụ, hãy xem Wikipedia.

+0

Bạn đang thiếu neo cuối. – codaddict

15
^\d{1,6}$ 

....................

+1

ngắn và ngọt. Tôi đã sử dụng một biến thể của điều này \ d {7.7} với tính năng Tìm/Thay thế TextFX của Notepad ++ để có được tất cả các số có 7 chữ số trong một tệp. cảm ơn nhiều vì đã dẫn tôi đến giải pháp mà tôi cần. –

+4

Vì '\ d' và' [0-9] 'không phải lúc nào cũng giống nhau [(xem bài đăng này)] (http://stackoverflow.com/q/890686/1447415),'^[0-9] {1,6} $ 'giải pháp có thể thích hợp hơn. – Johan

+0

Đơn giản và hiệu quả. – ksooklall

6

Bạn có thể thử

^[0-9]{1,6}$ 

cần làm việc.

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