2011-02-07 40 views
5

Tôi muốn kiểm tra chuỗi đầu vào để xác nhận hợp lệ văn bản thích hợp.RegEx để kiểm tra 3 hoặc nhiều lần xuất hiện liên tiếp của một ký tự

a. Tôi muốn người dùng cho phép viết các ký tự chữ và số bao gồm dấu chấm, dấu phẩy, dấu gạch ngang và dấu ngoặc tròn()

b. Tuy nhiên, tôi không muốn người dùng nhập NUMBER có 3 chữ số trở lên. ví dụ: 12 được phép trong khi 185 là KHÔNG.

c. Tôi không muốn người dùng nhập chuỗi như "............." hoặc "----------" hoặc "aaaaaaaaaaaaaa" hoặc "bbbbbbbb" v.v.

Vui lòng đề xuất cụm từ thông dụng cho giống nhau.

Trả lời

1

Bạn có thể sử dụng regex:

(?!.*(.)\1{2})^[a-zA-Z0-9.,()-]*$ 

Nó sử dụng lookahead tiêu cực (?!.*(.)\1{2}) để đảm bảo rằng có không có nhóm 3 lần lặp lại của bất kỳ nhân vật nào.

Sau đó, nó sử dụng regex ^[a-zA-Z0-9.,()-]*$ để đảm bảo rằng chuỗi được tạo thành chỉ là bảng chữ cái, số, dấu chấm, dấu phẩy, dấu ngoặc đơn và dấu gạch nối.

Rubular link

+0

tôi đã sử dụng 'code' này if (preg_match ("(*() \ 1 {2}) ^?!.. [A-zA-Z0-9,() -.] * $ ", $ about_you)) {\t \t \t \t \t \t echo 'Văn bản không hợp lệ'; \t \t} 'mã' và nó ném lỗi sau: Cảnh báo: preg_match() [function.preg-match]: Trình sửa đổi không xác định '^' trong E: \ Projects \ www \ scripts \ test-f.php trên dòng 33 dòng 33 bắt đầu tại nếu (preg_match ("(?!. * (.) \ 1 {2})^[a-zA-Z0-9.,() -] * $", $ about_you)) { –

+0

Thử: 'if (preg_match ("/(?!. * (.) \ 1 {2})^[a-zA-Z0-9.,() -] * $/", $ about_you)) {' – codaddict

+0

Xin lỗi nhưng nó không hoạt động. Mặc dù tôi không nhận được bất kỳ lỗi phân tích cú pháp nào ngay bây giờ nhưng biểu thức không thể xoay vòng chuỗi vì nó phải là 'mã' nếu (preg_match ("/(?!. * (.) \ 1 {2})^[a-zA -Z0-9.,() -] * $/", $ about_you)) { \t \t \t echo" lỗi "; \t \t} 'mã' –

0

Hầu hết các libs regex hỗ trợ folloing: /(.)\1{2,}/

nơi \1 là aa backreference

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