2013-01-14 30 views
6

Im cho phép số, chữ cái và ký tự đặc biệt ngoại trừ %_ trong hộp văn bản html của tôi. Tôi có mẫu /[[email protected]#$^&*()-+=]/. Tôi nghĩ rằng đây không phải là cách tốt nhất để làm điều đó bởi vì tôi phải liệt kê tất cả các nhân vật đặc biệt ngoại trừ hai nhân vật được đề cập. Có cách nào mà tôi không phải liệt kê tất cả các nhân vật đặc biệt và không bao gồm cả hai nhân vật được đề cập? BTW, Im sử dụng javascript regex.regex - Làm cách nào để loại trừ "%" và "_"?

Để có bản trình diễn, vui lòng xem http://jsfiddle.net/ce8Th/

Xin vui lòng trợ giúp.

Trả lời

3

Không cần vòng lặp phức tạp đó. Chỉ cần gọi replace trực tiếp trên toàn bộ chuỗi:

$(this).val(function (i, v) { 
    return v.replace(/%|_/g, ''); 
}); 

Dưới đây là fiddle của bạn: http://jsfiddle.net/ce8Th/1/

+0

Cảm ơn nó thực sự đã làm việc và làm cho mã của tôi đơn giản hơn nhiều. Gonna chấp nhận cái này. Chỉ cần ngất xỉu trong vài phút. – NinjaBoy

+0

Tôi sẽ cảnh báo rằng đây không phải là việc khử trùng - điều này có thể tốt cho bạn, nhưng điều đó có nghĩa là các ký tự khác sẽ được cho phép có thể không phù hợp với bạn: dấu cách, tab, những thứ khác không có trong danh sách gốc của bạn. – jakerella

+0

@jakerella - Câu hỏi ban đầu không đề cập đến vệ sinh (mặc dù nó có thể là ý định của anh ta - trong trường hợp đó * bất cứ điều gì * phía khách hàng là vô dụng). –

2

Bạn chỉ có thể làm điều ngược lại:

/[%_]/ 

if (pattern.test(.... 

Nó cũng tốt đẹp để không sử dụng regex nếu bạn don' t phải, không phải là nó tạo sự khác biệt lớn trong trường hợp này:

if ("%_".split().indexOf(text.charAt(i)) > -1) { 
+1

Tôi nghĩ bạn có nghĩa là '/ [^% _] /' - nhưng bạn phải cẩn thận với điều đó, nó sẽ bao gồm rất nhiều ký tự khác ... tab, dòng mới, các ký tự ngôn ngữ khác, v.v. – jakerella

2

Một danh sách trắng luôn luôn là tốt nhất. Tôi sẽ khuyên bạn nên giữ những gì bạn phải trừ thêm một modifier chiều dài và bắt đầu và ký tự cuối:

/^[[email protected]#$^&*()-+=]+$/ 
1

Liệu tôi có tình cờ được corrent trong đoán rằng bạn đang sử dụng đầu vào thành viên này cho một truy vấn MySQL liên quan đến LIKE để tìm kiếm một phần kết quả phù hợp?

Nếu có, không loại trừ các ký tự. Thay vào đó, hãy thoát chúng ở phía máy chủ. Ví dụ:

$output = str_replace(Array("%","_"),Array("\\%","\\_"),$input); 
+0

Hoặc chỉ 'addslashes ($ input);'? – jakerella

+0

@jakerella 'addslashes' không xem xét' _' và '%' để có thể thoát được. –

+0

Ugh ... đó không phải là mát mẻ. Cảm ơn. – jakerella

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