2017-09-14 20 views
-1

我使用正則表達式來允許在文本框中使用字母數字,但不知道如何允許退格和刪除。現在用戶無法刪除,空間,退格。正則表達式爲字母數字,刪除,退格,空格,但不是特殊字符

下面是代碼

$('#MemberBasicInfor_FirstName, #MemberBasicInfor_LastName').on('keypress', function (event) { 
     var regex = new RegExp("^[a-zA-Z0-9]+$"); 
     var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); 
     if (!regex.test(key)) { 
      event.preventDefault(); 
      return false; 
     } 
    }); 

請修改,並允許刪除,空間和退格。

+0

正則表達式測試字符串,_characters_的名單。刪除按鍵不能作爲字符存儲。相反,你應該使用['event.keyCode'](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode)或類似的東西。如果有人有另一個不被棄用的解決方案,請分享。 – clabe45

回答

0

Backspace不是RegExable,所以你最好使用ASCII碼。

$('#MemberBasicInfor_FirstName, #MemberBasicInfor_LastName').on('keypress', function (event) { 
    var allowedCodes = [[8, 8], [32, 32], [48, 57], [65, 90], [97, 122], [127, 127]]; 
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); 
    if (!allowedCodes(codePair => key.charCodeAt(0) <= codePair[0] || key.charCodeAt(0) >= codePair[1])) { 
     event.preventDefault(); 
     return false; 
    } 
}); 
+0

可以在字符類中使用'\ b'在RegExp中匹配Backspace,它相當於字符代碼8。 – skirtle

0

這很大程度上取決於您使用的瀏覽器,Chrome和Edge甚至不會激發keypress用於刪除和退格。對於Firefox keypress會更加普遍,甚至像箭頭鍵這樣的東西都會觸發它。

退格的字符代碼爲8,可以用\b表示。空間只是一個空間。刪除時,方向鍵,Home和End將全部給出字符代碼0. Firefox不考慮Ctrl或Alt,因此類似Ctrl+v的內容將被視爲v,您需要修改代碼以檢查修改鍵這是一個問題。同樣,大多數瀏覽器都允許通過其他不涉及按鍵的技術進行復制和粘貼,所以這些都不會受到影響。

所有這一切說,我認爲你需要的正則表達式是這樣的:

var regex = /[a-zA-Z0-9\b\0 ]/; 
相關問題