2011-12-08 83 views
3

我將this solution改編成我的腳本。這個想法是爲了防止用戶輸入未經授權的字符(當然在後端也有一個過濾器)。用於textarea的jQuery輸入過濾器

$('#someinput').keyup(function() { 
    var $th = $(this); 
    $th.val($th.val().replace(/[^a-zA-Z0-9]/g, function(str) { 
     console.log(str); 
     return ''; 
    })) 
}) 

它的工作不錯,但我還需要用戶能夠輸入特定允許的字符,如:!?,ñáéíóú - 我的意思是,基本A-ZA-Z0-9再加上一些基本的字符和一大堆特殊語言字符。

實際需要被排除在外是什麼:@#$%^ & *()= _ +「':;?!/ <> \ | {} []

任何想法感謝

解決方案感謝Michael

//query 
$('#someinput').keyup(function() { 
    var $th = $(this); 
    $th.val($th.val().replace(/[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g,function(str){return '';})); 
}).bind('paste',function(e) { 
    setTimeout(function() { 
     $('#someinput').val($('#someinput').val().replace(/[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g,function(str){return '';})); 
     $('#someinput').val($('#someinput').val().replace(/\s+/g,' ')); 
    },100); 
}); 
+1

http://stackoverflow.com/questions/6565480/javascript-jquery-regex-replace-input-field-with-valid-characters看看這有助於 – Val

回答

4

反轉正則表達式來只替換你想省略特定的字符:

$th.val($th.val().replace(/\s?[@#$%\^&*()=_+"':;\/<>\\\|{}\[\]]/g, "")); 
// Edit: added optional \s to replace spaces after special chars 

注意,他們幾個人的需要與[]字符類中的反斜槓轉義:\\\[\]\^\/

+0

大!我還將此添加到了bind('paste'),函數(e)在用戶粘貼一堆文本時運行正則表達式。如果他粘貼:「你好@朋友」,結果將是「你好朋友」,除了有2個空格而不是1個以外,還可以。是否有可能在相同的正則表達式中阻止多個空格?或者我應該把它放在bind()事件的一個單獨的正則表達式中。 – andufo

+0

@andufo可以在上面的'[]'之前和之後放置一個可選空間。試試我上面的編輯,看看它是否適合你。否則,你可以做另一個替換來摺疊多個空格:'/ \ s + /'替換爲一個空格。 –

+0

我想我可能會自己做第二次替換,而不是嘗試修改那個正則表達式 –

3

如果我理解你想要做什麼,你就不能添加這些不需要的字符到你的正則表達式而不是做[^a-zA-Z0-9]

替換與[@#\$%\^&\*\(\)=_\+"':;\/<>\\\|\{\}\[\]](注意轉義)