2011-07-11 53 views
5

Tôi không phải là rất mới với các cụm từ thông dụng, nhưng tôi chưa thể tìm thấy biểu thức đầy đủ cho vấn đề của tôi cho đến thời điểm này:Biểu thức chính quy JavaScript

Tôi muốn kiểm tra chuỗi mà người dùng nhập một textfield. Chuỗi phải bao gồm một hoặc nhiều cụm từ được phân tách bằng dấu chấm phẩy.

thực sự Có hai loại từ ngữ:

  1. Đầu tiên bao gồm một số, tiếp theo là một gạch nối và sau đó theo sau một số lần nữa, ví dụ 1-4 hoặc 22-44

  2. Cụm từ thứ hai bao gồm một số và dấu phẩy lặp lại 0 hoặc nhiều lần, ví dụ: 1,2 hoặc 4,5,6

Tất cả các từ phải được kết thúc bằng dấu chấm phẩy.

Một đầu vào hợp lệ sẽ là: 1-4;5,6,7;9-11; hoặc 1,3;4-6;8,9,10;

Tôi đã cố gắng rất nhiều biến thể nhưng không thể tìm ra một giải pháp cho đến nay. Vấn đề của tôi là chuỗi đầu vào này có thể bao gồm bất kỳ số lượng từ nào. Tôi đã cố gắng giải quyết điều này với nhà điều hành OR và "lookahead", tương ứng, nhưng không thành công.

Mọi trợ giúp sẽ được đánh giá rất cao.

Cảm ơn nhiều, enne

+4

Ví dụ của bạn không khớp với mô tả của bạn. "Đầu vào hợp lệ" đầu tiên bị thiếu dấu chấm phẩy cuối cùng và "22-44" không phải là "một chữ số theo dấu gạch ngang ...". –

+0

Đó là rất đúng Kerrek, thêm một dấu chấm phẩy và thay đổi "chữ số" thành "số". Cảm ơn nhận xét. – enne87

Trả lời

4

regex này nên làm những gì bạn cần:

/^(?:[0-9]+-[0-9]+;|[0-9]+(?:,[0-9]+)*;)+$/ 
+0

Điều này sẽ không chấp nhận '1-4; 5,6,7; 9-11', ví dụ của anh ta không có thiết bị đầu cuối ';'. – Vache

+0

@Vache - lưu ý rằng yêu cầu của OP là mơ hồ vì ví dụ đó không đồng ý với tuyên bố trên dòng trước đó rằng "Tất cả các điều khoản phải được kết thúc bằng dấu chấm phẩy". – nnnnnn

+0

Điểm tốt. Mô tả đã nói rằng ** "tất cả các cụm từ phải được kết thúc bằng dấu chấm phẩy" ** vì vậy tôi giả định rằng điều này bao gồm cụm từ cuối cùng. – EdoDodo

2

EDITED: Câu hỏi thứ nhất nhìn các dấu chấm phẩy là dải phân cách, bây giờ nó cho thấy chúng như Terminators.

Dưới đây là một chuỗi của một hay nhiều điều khoản, chấm dứt bởi dấu chấm phẩy, trong đó mỗi học kỳ là một số hoặc một loạt số hoặc một danh sách các số bằng dấu phẩy:

/^(\d+(-\d+|(,\d+)*)?;)+$/ 

Với phi -capturing nhóm

/^(?:\d+(?:-\d+|(?:,\d+)*)?;)+$/ 
+0

Ray rất tuyệt, cảm ơn :) Thật không may, tôi chỉ có thể đặt một câu trả lời là câu trả lời được chấp nhận:/ – enne87

1

mất của tôi ..

^(?:\d+-\d+(?:;|$)|(?:\d+(?:[,;]|$))+)+$

+0

Không tệ, chỉ dấu chấm phẩy cuối cùng của cụm từ cuối cùng bị thiếu. Cảm ơn bạn đã giúp đỡ. – enne87

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