2012-12-12 52 views
31

Tôi biết câu hỏi này được hỏi thường xuyên hơn ở đây trên Stack, nhưng tôi dường như không nhận được câu trả lời thẳng từ các câu hỏi đã được đăng.jQuery: Kiểm tra xem các ký tự đặc biệt có tồn tại trong chuỗi

Tôi cần kiểm tra xem tất cả các ký tự đặc biệt (trừ -) có nằm trong chuỗi không, nếu có, thì hãy cảnh báo cho người dùng.

if($('#Search').val().indexOf('@') == -1 || $('#Search').val().indexOf('#') == -1 || $('#Search').val().indexOf('$') == -1 || $('#Search').val().indexOf('%') == -1 || $('#Search').val().indexOf('^') == -1 || $('#Search').val().indexOf('&') == -1 || $('#Search').val().indexOf('*') == -1 || $('#Search').val().indexOf('(') == -1 || $('#Search').val().indexOf(')') == -1 || $('#Search').val().indexOf('_') == -1 || $('#Search').val().indexOf('\'') == -1 || $('#Search').val().indexOf('\"') == -1 || $('#Search').val().indexOf('\\') == -1 || $('#Search').val().indexOf('|') == -1 || $('#Search').val().indexOf('?') == -1 || $('#Search').val().indexOf('/') == -1 || $('#Search').val().indexOf(':') == -1 || $('#Search').val().indexOf(';') == -1 || $('#Search').val().indexOf('!') == -1 || $('#Search').val().indexOf('~') == -1 || $('#Search').val().indexOf('`') == -1 || $('#Search').val().indexOf(',') == -1 || $('#Search').val().indexOf('.') == -1 || $('#Search').val().indexOf('<') == -1 || $('#Search').val().indexOf('>') == -1 || $('#Search').val().indexOf('{') == -1 || $('#Search').val().indexOf('}') == -1 || $('#Search').val().indexOf('[') == -1 || $('#Search').val().indexOf(']') == -1 || $('#Search').val().indexOf('+') == -1 || $('#Search').val().indexOf('=') == -1) 
{ 
    // Code that needs to execute when none of the above is in the string 
} 
else 
{ 
    alert('Your search string contains illegal characters.'); 
} 

Nhưng điều này dường như không làm việc ... có thể bất cứ ai giúp tôi về vấn đề này:

Những gì tôi có cho đến nay đây là?

Cảm ơn trước!

Guido

+2

Bạn cần sử dụng cụm từ thông dụng ở đây thay vì một điều kiện riêng biệt trị giá hàng tỷ. Và bạn ** chắc chắn ** phải nói chính xác nó "dường như không hoạt động". – Jon

+0

Xem điều này có thể giúp bạn http://stackoverflow.com/questions/10505772/checking-for-any-occurrence-of-special-characters-with-jquery – Hkachhia

Trả lời

82

Nếu bạn thực sự muốn kiểm tra cho tất cả những ký tự đặc biệt, nó dễ dàng hơn để sử dụng một biểu thức chính quy:

var str = $('#Search').val(); 
if(/^[a-zA-Z0-9- ]*$/.test(str) == false) { 
    alert('Your search string contains illegal characters.'); 
} 

trên sẽ chỉ cho phép chuỗi bao gồm toàn bộ các ký tự trên dãy a-z, A-Z, 0-9, cộng với dấu gạch ngang một ký tự dấu cách. Một chuỗi chứa bất kỳ ký tự nào khác sẽ gây ra alert.

+0

Điều này hoạt động hoàn hảo. Ngắn hơn và nhanh hơn, cảm ơn! –

+0

Đã thêm một giải thích ngắn. Nhược điểm là nó sẽ không cho phép các ký tự quốc tế như 'é' và' ñ', nhưng nếu bạn không cần phải cho phép họ, tôi tin rằng đó là con đường để đi. – bfavaretto

+0

Nó hoạt động, ngay cả với các ký tự quốc tế;) Cảm ơn một lần nữa! –

2

Bạn đang kiểm tra xem chuỗi chứa tất cả nhân vật bất hợp pháp. Thay đổi số || s thành && s.

20
var specialChars = "<>@!#$%^&*()_+[]{}?:;|'\"\\,./~`-=" 
var check = function(string){ 
    for(i = 0; i < specialChars.length;i++){ 
     if(string.indexOf(specialChars[i]) > -1){ 
      return true 
     } 
    } 
    return false; 
} 

if(check($('#Search').val()) == false){ 
    // Code that needs to execute when none of the above is in the string 
}else{ 
    alert('Your search string contains illegal characters.'); 
} 
4

Bạn cũng có thể sử dụng phương pháp danh sách trắng -

var str = $('#Search').val(); 
var regex = /[^\w\s]/gi; 

if(regex.test(str) == true) { 
    alert('Your search string contains illegal characters.'); 
} 

Các regex trong ví dụ này là chữ số, ký tự chữ, dấu gạch dưới (\ w) và khoảng trắng (\ s). Dấu mũ (^) chỉ ra rằng chúng ta phải tìm mọi thứ không có trong regex của chúng ta, vì vậy hãy tìm những thứ không phải là ký tự từ, gạch dưới, chữ số và khoảng trắng.

+4

Điều này không thành công cho các ký tự quốc tế (tiếng Trung, tiếng Ả Rập, v.v.). Tôi sẽ không sử dụng nó. –

+0

'== true'? Sẽ không 'if (regex.test (str)) {[...]}' đủ? – scniro

+0

Tất nhiên nó sẽ @scniro. Tôi chỉ cần đặt toàn bộ phương trình cho sake rõ ràng. –

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