2011-10-30 38 views
6

Tôi có một hộp văn bản, nó có thể có các giá trị như 1 hoặc 1,2 hoặc 1,225,345,21 tức là nhiều giá trị. Nhưng bây giờ tôi muốn xác nhận đầu vào này.RegEx để xác thực JavaScript các số được phân cách bằng dấu phẩy

toString().match(/^(([0-9](,)?)*)+$/) 

Đây là mã tôi đang sử dụng. Nó được xác nhận đúng thôi, nhưng một vấn đề khi sử dụng nhập các giá trị như thế này:

inputval:1,22,34,25,645(true) 
inputval:1,22,34,25,645,(falues) 

Khi người dùng nhập vào dấu phẩy (,) như cuối cùng nó sẽ ném ra một lỗi.

Có thể bất kỳ ai giúp tôi không?

Trả lời

21

Chỉ bằng tay bao gồm ít nhất một:

/^[0-9]+(,[0-9]+)*$/ 
2

biến thể trên Regex của Ariel :-)

/^(([0-9]+)(,(?=[0-9]))?)+$/ 

Các , phải được theo sau bởi một chữ số (?=[0-9]).

Hoặc

/^(([0-9]+)(,(?!$))?)+$/ 

Các , phải không được theo sau bởi sự kết thúc của chuỗi (?!$).

/^(?!,)(,?[0-9]+)+$/ 

Chúng tôi kiểm tra xem các ký tự đầu tiên không phải là một ,(?!,) và sau đó chúng ta đặt các tùy chọn , trước các chữ số. Đó là tùy chọn vì khối chữ số đầu tiên không cần nó.

+0

Tôi sẽ xóa hoàn toàn mẫu '(x + y?) +' - nó dễ dàng dẫn đến [backstacking thảm khốc] (http://www.regular-expressions.info/catastrophic.html). – Kobi

+0

@Kobi Như mọi khi, những gì bạn có thể làm và những gì bạn nên làm với regexes là khá khác nhau :-) – xanatos

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