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]
.
+1 cho lời giải thích mở rộng –
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. –