2013-05-18 74 views
18

Tôi đang cố gắng xác thực danh sách được phân cách bằng dấu phẩy cho số 1-8.Số được phân tách bằng dấu phẩy Regex

tức là 2,4,6,8,1 là dữ liệu nhập hợp lệ.

Tôi đã thử [0-8,]* nhưng dường như chấp nhận 1234 là hợp lệ. Nó không đòi hỏi một dấu phẩy và nó cho phép tôi gõ vào một số lớn hơn 8. Tôi không chắc chắn tại sao.

+1

Dấu phẩy cần nằm ngoài lớp ký tự và được nhóm thành ký tự số bằng dấu ngoặc đơn. Đó là: '([0-8],) +' –

+0

Bạn nói bạn muốn số 1-8, nhưng regex của bạn đang cố gắng để phù hợp với 0-8. Đó là nó? – Cairnarvon

+0

1-8 chỉ không có gì cao hơn 8 –

Trả lời

22

[0-8,]* sẽ phù hợp với zero hoặc các phiên bản liên tiếp khác của 0 đến 8 hoặc ,, ở bất kỳ đâu trong chuỗi của bạn. Bạn muốn một cái gì đó như thế này:

^[1-8](,[1-8])*$ 

^ phù hợp với sự khởi đầu của chuỗi, và $ phù hợp cuối cùng, đảm bảo rằng bạn đang kiểm tra toàn bộ chuỗi. Nó sẽ khớp với một chữ số duy nhất, cộng với số không hoặc nhiều phiên bản của dấu phẩy theo sau là một chữ số sau dấu phẩy.

+0

nó sẽ phá vỡ nếu tôi sẽ cố gắng kiểm tra các giá trị 1234, 1345, 4455 –

0

Bạn cần một số + dấu phẩy kết hợp đó có thể lặp lại:

^[1-8](,[1-8])*$ 

Nếu bạn không muốn nhớ lại ngoặc thêm ?: đến Parens, như vậy:

^[1-8](?:,[1-8])*$ 
+0

21,22,24,343546 là hợp lệ với biểu thức này. Con số cao nhất chỉ có thể là 8 –

+0

. Sửa lỗi đó. – quux00

1

Bạn có thể thử với Regex này:

^[1-8](,[1-8])+$ 
0
/^\d*(,\d*)*$/ 

này sẽ bao gồm tất cả các giá trị số những người đang Comma Separated.

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