2013-12-07 106 views
0

如何從jQuery字符串中刪除除數字,字母和連字符以外的所有內容?jQuery只允許數字,字母和連字符

我發現這個代碼,只有唯一的字母數字字符允許,但我不知道我怎麼會去有關添加一個連字符。

$('#text').keypress(function (e) { 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
    if (regex.test(str)) { 
     return true; 
    } 

    e.preventDefault(); 
    return false; 
}); 

回答

-1

我想你可以在方括號內加一個連字符。

"^[a-z A-Z 0-9 -]+$" 
+5

你要逃避它,否則它會嘗試檢測範圍(如'az':' 「^ [a-zA-Z0-9 \ - ] + $」'。此外,增加空格將允許空格。 – Sylvain

+0

@Peter我確實在等待這個答案的更新,所以我自己做了一個(有一些補充) 。 – Sylvain

5

你只需要將正則表達式更改爲:"^[a-zA-Z0-9\-]+$"

注意,連字符被使用\逃脫,否則它用於指定一個範圍等a-z(從a字符z)。

這個代碼將只檢查,如果最後一個輸入的字符是在允許列表中,你可能也想在你的領域糊狀後檢查,該值仍然是正確的:

// The function you currently have 
$('#text').keypress(function (e) { 
    var allowedChars = new RegExp("^[a-zA-Z0-9\-]+$"); 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
    if (allowedChars.test(str)) { 
     return true; 
    } 
    e.preventDefault(); 
    return false; 
}).keyup(function() { 
    // the addition, which whill check the value after a keyup (triggered by Ctrl+V) 
    // We take the same regex as for allowedChars, but we add^after the first bracket : it means "all character BUT these" 
    var forbiddenChars = new RegExp("[^a-zA-Z0-9\-]", 'g'); 
    if (forbiddenChars.test($(this).val())) { 
     $(this).val($(this).val().replace(forbiddenChars, '')); 
    } 
}); 
1

既然有如此多的關注在這些回答中在字符類中包含連字符,並且由於我無法通過谷歌搜索輕鬆找到這些信息,我想我會補充一點,如果連字符是第一個字符,那麼連字符不需要被轉義類規範。其結果是,下面的字符類也能發揮作用,以指定除了其它字符連字符:

[-a-zA-Z0-9] 
+0

注意,它也行放一個連字符轉義在一個字符類的結尾。 – ridgerunner

+0

@Ridgerunner這給了我一個錯誤我。你能舉一個例子,你用? –

+1

這個問題是Ruby版本處理JavaScript。 – ridgerunner

相關問題