2012-12-12 5 views
31

dizesinde özel karakterlerin olup olmadığını kontrol edin Bu soruyu Stack'ta daha sık sorduğumu biliyorum, ancak gönderdiğim sorulardan doğru bir yanıt alamıyorum.jQuery:

Tüm özel karakterlerin (hariç -) bir dizede olup olmadığını kontrol etmem gerekiyorsa, o zaman kullanıcıya bir uyarı verin.

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.'); 
} 

Ama bu işe görünmüyor ... herkes bu konuda bana yardımcı olabilir:

Ne var bugüne kadar böyle?

Şimdiden teşekkürler!

Sen dize tüm geçersiz karakterler içerip içermediğini kontrol ediyoruz

+2

Bazilyon ayrı koşullar yerine burada düzenli bir ifade kullanmanız gerekir. Ve siz ** kesinlikle ** nasıl çalıştığını tam olarak "görünmüyor" demek zorundasınız. – Jon

+0

Bu, http://stackoverflow.com/questions/10505772/checking-for-any-occurrence-of-special-characters-with-jquery – Hkachhia

cevap

82

, bu normal bir ifade kullanmak daha kolaydır:

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

yukarıda sadece sağlayacak tamamen aralıkları a-z, A-Z, 0-9 tarihinde karakterden oluşan dizeleri, artı bir boşluk karakteri tire. Başka bir karakter içeren bir dize alert neden olur. (\ S)

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

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

Bu örnekte normal ifade (\ w) basamak, kelime karakterler, alt ve boşluk olan -

+0

Bu işe yarayabilir. Çok daha kısa ve daha hızlı, teşekkürler! –

+0

Kısa bir açıklama ekledi. Dezavantajı, 'é' ve 'ñ' gibi uluslararası karakterlere izin vermeyeceğidir, ancak izin vermeniz gerekmiyorsa, gitmenin yolu olduğuna inanıyorum. – bfavaretto

+0

Uluslararası karakterlerle bile çalışıyor,) Tekrar teşekkürler! –

2

Guido. || s'yi && s olarak değiştirin. Gerçekten bütün o özel karakterler için kontrol etmek istiyorsanız

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

Ayrıca beyaz bir yöntem kullanabilirsiniz. İşaret (^), normal ifademizde olmayan her şeyi aradığımızı gösterir, bu yüzden kelime karakterleri, alt çizgi, rakam ve boşluk olmayan şeyleri arayın.

+4

kullanın. Bu, uluslararası karakterler (çince, arapça vb.) Için başarısız olur. –

+0

'== true'? Olmazsa (regex.test (str)) {[...]} 'yeterli olur mu? – scniro

+0

Elbette @scniro olur. Tüm denklemi açıklığa kavuşturdum. –