2010-05-19 43 views
1

我有一個字段,並希望防止一些​​非法字符,同時顯示用戶,因爲他鍵入。 我如何在下面的例子中做到這一點?jQuery keyup()非法字符

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

編輯:我應該把非法字符數組

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

爲什麼你想要他們在一個數組? – user113716 2010-05-19 13:58:45

+0

eeuuh,因爲有幾個?不知道..也許可以用正則表達式來完成,但這對我來說是中國人。 – FFish 2010-05-19 14:02:40

回答

5

嘗試使用正則表達式

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

,僅供參考:你可以更換.attr("value",val).val(val).attr("value").val()

UPDATE:

如果要排除多個字符你可以把它們放到正則表達式。如果你想排除一個用來控制正則表達式的字符,你需要用\字符來逃避它們來控制正則表達式:[]()/\+{}?*+.^$

+0

太棒了!感謝.val()提示也Jens。乾杯 – FFish 2010-05-19 14:15:33

+1

如果用戶使用GUI複製和粘貼具有多個排除字符的文本,您應該使用'g'(全局標識符)。 – user113716 2010-05-19 14:27:16

+0

@帕特里克:你是對的。我改變了我的代碼 – jigfox 2010-05-19 15:15:51

1

試試這個。沒有數組,但是。

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

您可能使用indexOf來確定一個字符串中含有一定炭...

元音=陣列( '「', 」<「, 」>「,」&「);

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