2012-12-26 48 views
1

我正在使用onKeyDown和一個正則表達式來解析鍵盤輸入。我需要它到所有的A-Z,退格和問號。問題伴隨着?,我無法讓它被接受。我曾嘗試 /[AZ \ X08]/
/[AZ \ X08 \]/
/[AZ \ X08 \\]/
/[AZ \ X08 \ x3F]/
在Javascript中的正則表達式解析輸入onKeyDown

沒有哪一個允許?被接受。

function kd(evt) { 
    var theEvent = evt || window.event; 
    var key = theEvent.keyCode || theEvent.which; 
    key = String.fromCharCode(key); 
    var regex = /[A-Z\x08]/; 
    if (!regex.test(key)) { 
     theEvent.returnValue = false; 
     if (theEvent.preventDefault) theEvent.preventDefault(); 
    } 
} 

任何幫助將不勝感激。

回答

2

如果要防止在reg匹配時在文本框中打印字符,應該使用按鍵。而該法規是:/^[a-zA-Z\x08\?]$/。這對我有用。

var regex = /^[a-zA-Z\x08\?]$/; 
// OR this one if you want uppercase letters: 
var regex = /^[A-Z\x08\?]$/; 
$("#regtest").keypress(function(event) { 
    var _event = event || window.event; 
    var key = _event.keyCode || _event.which; 
    alert(key); 
    key = String.fromCharCode(key); 
    alert(key); 
    if(regex.test(key)) { 
     _event.returnValue = false; 
     if (_event.preventDefault) 
      _event.preventDefault(); 
    } 
}); 
+0

更好地匹配你想要的匹配,而不是你不這樣做,因爲這個正則表達式可以輸入一個逗號。 –

3

問號應該去character class內:

/[A-Z\x08?]/ 

的另一個問題是,你應該使用onkeypress,以確定哪些字符被輸入。事件onkeyuponkeydown只會告訴你哪些按鍵被按下和釋放,但他們不會說出這些對應的字符。在不同的鍵盤上,您必須按不同的鍵才能生成相同的字符。

例如在我的鍵盤我必須按+獲得?。在美式鍵盤上,您通常必須按Shift/才能獲得?。由於鍵盤佈局的這種差異,使用onkeyup和onkeydown事件來檢測?是不可靠的。

+0

對不起,這是我做一個壞貼。我在班上有他們。上面的這個表達式對我不起作用。 –

+0

好吧,我會把它移到其他事件。我的印象是,Sting.fromCharCode將它從按下的按鍵轉換爲那些按下的字符,表示我可以解析。 –