2009-10-30 29 views
111

Tôi đang cố gắng viết một số regular expression chỉ cho phép chữ thường và tối đa 10 ký tự. Những gì tôi có cho đến nay trông như sau:Cụm từ thông dụng để giới hạn số ký tự thành 10

pattern: /^[a-z]{0,10}+$/ 

Điều này không hoạt động hoặc biên dịch. Tôi đã có một một làm việc đó sẽ chỉ cho phép chữ thường mà là thế này:

pattern: /^[a-z]+$/ 

Nhưng tôi cần phải hạn chế số lượng ký tự đến 10

+4

Các {} và + làm điều tương tự (đếm), do đó họ không cần thiết, vì thế mà lỗi. – PhiLho

+1

Bạn nên thả dấu '+' từ/^ [a-z] {0,10} + $ /. Nó phải là/^ [az] {0,10} $/ –

+1

Lưu ý rằng mẫu '^ [az] {0,10} + $' biên dịch trên một số ngôn ngữ và một số ngôn ngữ đáng chú ý là Java, Perl (5.10+) , PHP, Ruby (1.9+). Xem [trang này] (http://www.regular-expressions.info/possessive.html) để biết thêm chi tiết. – Jerry

Trả lời

247

Bạn có thể sử dụng dấu ngoặc nhọn để kiểm soát số lần xuất hiện. Ví dụ, điều này có nghĩa 0-10:

/^[a-z]{0,10}$/ 

Các tùy chọn là:

  • {3} Chính xác 3 lần xuất hiện;
  • {6,} Tối thiểu 6 lần xuất hiện;
  • {2,5} 2 đến 5 lần xuất hiện.

Xem regular expression reference.

Biểu thức của bạn có dấu + sau khi đóng dấu ngoặc nhọn, do đó có lỗi.

5

Nó phụ thuộc rất nhiều vào chương trình bạn đang sử dụng. Các chương trình khác nhau (Emacs, vi, sedPerl) sử dụng các cụm từ thông dụng hơi khác nhau. Trong trường hợp này, tôi muốn nói rằng trong mẫu đầu tiên, dấu "+" cuối cùng phải được loại bỏ.

8

/^[a-z]{0,10}$/ sẽ hoạt động. /^[a-z]{1,10}$/ nếu bạn muốn khớp ít nhất một ký tự, chẳng hạn như /^[a-z]+$/.

7

Có thể có ích khi thêm đối sánh tham lam vào cuối chuỗi, vì vậy bạn có thể chấp nhận chuỗi> 10 và regex sẽ chỉ trả lại tối đa 10 ký tự đầu tiên. /^[a-z0-9]{0,10}$?/

2
grep '^[0-9]\{1,16\}' | wc -l 

Cung cấp cho các tội với kết hợp chính xác đếm với giới hạn

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