2009-03-27 36 views
22

Tôi có danh sách các mục nhập văn bản mà người dùng có thể nhập vào cơ sở dữ liệu và tôi cần xác thực các đầu vào này bằng Cụm từ thông dụng vì một số trong số đó phức tạp. Một trong các trường phải có khoảng trống trong các con số (ví dụ: 10, 12, 14, 16 ...). Câu hỏi của tôi là, có một cấu trúc Regex sẽ cho phép tôi chỉ phù hợp với cả chữ số lẻ hay chữ số lẻ? Tôi biết tôi có thể kéo giá trị này ra và làm một kiểm tra phân chia trên nó, nhưng tôi đã hy vọng cho một giải pháp Regex tinh khiết này nếu có thể.Cụm từ thông dụng chỉ khớp với số lẻ hoặc số chẵn

[Chỉnh sửa]

Các giải pháp tôi đã kết thúc sử dụng về vấn đề này đã được một thích ứng của JaredPar vì ngoài việc cần duy nhất của lẻ hoặc evens Tôi cũng cần thiết để hạn chế bởi một loạt (ví dụ, tất cả các số chẵn giữa 10-40). Dưới đây là kết thúc Regex.

^[123] [02.468] $

+0

Các {1} 's trong regex của bạn có lẽ hoàn toàn không cần thiết, mặc dù bạn động cơ regex có thể khác với động cơ của tôi. –

+0

Regex đó sẽ khớp với số lên đến 48. Nếu bạn muốn giới hạn số này ở mức 40, bạn cần số này:^[123] [02468] | 40 $ –

+1

Và Chris là đúng: {1} trong regex là tiếng ồn thuần túy, không vấn đề mà hương vị regex bạn đang sử dụng. –

Trả lời

45

số Odd

"^\d*[13579]$" 

Ngay cả số

"^\d*[02468]$" 

Run of Odds với, và tách khoảng trắng tiềm năng

"$\s*(\d*[13579]\s*,\s*)*\d*[13579]$" 

Run of SỐ CHẴN với, và tách khoảng trắng tiềm năng

"$\s*(\d*[02468]\s*,\s*)*\d*[02468]$" 
+0

Bạn thực sự ** thông minh ** –

1

Bạn có nghĩa là một cái gì đó như:

/(\d*[02468](, *\d*[02468]))|(\d*[13579](, *\d*[13579]))/ 

hoặc một trong ba cách giải thích khác có thể có của câu hỏi của bạn như worded?

+0

Tôi nghĩ bạn cũng cần phải xếp nhóm thứ hai trong mỗi nhóm, phải không? –

5

Regex thực sự không quá khó để thiết kế, nếu bạn tính đến số chẵn hoặc lẻ có thể được kiểm tra bằng cách chỉ nhìn vào chữ số cuối cùng, cần phải là số chẵn hoặc lẻ. Vì vậy, các Regex cho số lẻ chạy có thể là:

"^(\s*\d*[13579]\s*,)*(\s*\d*[13579]\s*)$" 

Replace [13579] bởi [02.468] cho số chẵn ...

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