2010-05-19 9 views
1

J'ai un champ et je veux empêcher certains caractères illégaux tout en montrant l'utilisateur pendant qu'il tape. Comment puis-je faire cela dans l'exemple suivant?jQuery keyup() caractères illégaux

$('input').bind("change keyup", function() { 
    var val = $(this).attr("value"); 
    /* 
    if (val --contains-- '"') { 
    $(this).css("background", "red"); 
      val = val.replace('"', ""); 
       $(this).attr("value", val) 
    } 
    */ 
    $("p").html(val); 
    }); 

EDIT: Je dois mettre les caractères illégaux dans un tableau

var vowels = new Array('"', "<", ">", "&"); 
+0

Pourquoi les voulez-vous dans un tableau? – user113716

+0

eeuuh, parce qu'il y en a quelques uns? Dnno .. Peut-être que cela peut être fait avec des expressions régulières, mais c'est chinois pour moi. – FFish

Répondre

5

Essayez d'utiliser une expression régulière

$('input').bind("change keyup", function() { 
var val = $(this).val(); 
var regex = /["<>&]/g; 
if (val.match(regex)) { 
    $(this).css("background", "red"); 
    val = val.replace(regex, ""); 
    $(this).val(val); 
} 
$("p").html(val); 
}); 

Et pour votre information:. vous pouvez remplacer .attr("value",val) avec .val(val) et .attr("value") avec .val()

MISE À JOUR:

Si vous voulez exclure plus de caractères que vous pouvez simplement les mettre dans le regex. Si vous souhaitez exclure un caractère utilisé pour contrôler l'expression régulière, vous devez leur échapper avec \ caractères pour contrôler l'expression régulière sont: []()/\+{}?*+.^$

+0

Super! Merci pour le conseil .val() aussi Jens. Cheers – FFish

+1

Vous devriez probablement utiliser 'g' (identifiant global) dans le cas où un utilisateur utilise l'interface graphique pour copier et coller du texte avec plusieurs caractères exclus. – user113716

+0

@patrick: vous avez absolument raison. J'ai changé mon code – jigfox

1

pour cette solution. Pas de tableau, cependant.

$('input').bind("change keyup", function() { 
     var $th = $(this); 
     $th.val($th.val().replace(/["<>&]/g, function(str) { return ''; })); 
    }); 
0

Vous pouvez utiliser le indexOf pour déterminer si une chaîne contient un certain ... ombles

voyelles = array ('"', "<", ">"," & ");

$('input').bind("change keyup", function() 
{ 
    var val = $(this).attr("value"); 
    var illegal = '';  
    $(vowels).each(function() 
    { 
     if(val.indexOf(this)!=-1) 
     { 
      illegal= this; 
      break; 
     } 
    }); 
    if(illegal != '') 
    { 
     $(this).css("background", "red"); 
     val = val.replace(illegal, ""); 
     $(this).attr("value", val) 
    } 
});