2013-06-18 28 views
7

我執行日期驗證和我現在做的是用戶只能進入numbers/backspace所以現在我要2個鍵添加到我的正則表達式。我想補充deletearrow keys這樣會有什麼改變,我應該在我的正則表達式。這做的是我的代碼添加刪除和箭頭鍵進入正則表達式

<input type="text" id="date" name="date" onkeypress="check(event,this);" /> 

這是我的Javascript代碼

<script type="text/javascript"> 

function check(evt, id) 
{ 

var value = id.value; 

var theEvent = evt || window.event; 
var key = theEvent.keyCode || theEvent.which; 
key = String.fromCharCode(key); 

var regex = /[0-9|\b|/]/; 

if(!regex.test(key)) 
{ 
    theEvent.returnValue = false; 

    if(theEvent.preventDefault) 
    theEvent.preventDefault(); 
} 
} 



</script> 

等待感謝您的幫助。

+0

,如果你認爲正確的您找到了解決方案,查看我在答案中添加的註釋,他們可能會幫助修復代碼以按預期工作。 – CME64

回答

9

可以跳過輸入驗證如果箭頭,刪除和退格鍵被壓

function check(evt, id) 
{ 

var value = id.value; 

var theEvent = evt || window.event; 
var key = theEvent.keyCode || theEvent.which; 

// Don't validate the input if below arrow, delete and backspace keys were pressed 
if(key == 37 || key == 38 || key == 39 || key == 40 || key == 8 || key == 46) { // Left/Up/Right/Down Arrow, Backspace, Delete keys 
    return; 
} 

key = String.fromCharCode(key); 
var regex = /[0-9|/]/; 

if(!regex.test(key)) 
{ 
    theEvent.returnValue = false; 

    if(theEvent.preventDefault) 
    theEvent.preventDefault(); 
} 
} 
+0

感謝我得到它 –

+0

這真的是一種掩蓋輸入的糟糕方式,因爲按鍵並不是文本輸入到字段的唯一方式。無論如何,如果這對你有用,那麼你還需要添加'home','end','pgup','pgdown'鍵。 – nickf

+0

此代碼不適用於符號(,&和% – hiew1

-1

爲什麼不只是檢查元素的實際值,而不是創建值的按鍵?

您可以使用oninput事件。

+0

我想限制用戶輸入以添加一些字符 –

+0

舊輸入事件在舊版瀏覽器(特別是IE8)中不受支持,而且它在IE9中的漏洞很多。 onchange,onpaste&onpropertychange組合可能是一種解決方法,儘管如此。 –

+0

@AzamAlvi:這正是'oninput'的用途。您目前關於檢查按鍵的建議並未涵蓋您可以輸入多種方式(可能無效)的數據。例如,右鍵單擊+粘貼,拖動+放置文本等等。 @roasted如果需要支持過時的瀏覽器,那麼是的,你需要做一些攻擊,但這不是一個好的答案。 – nickf

1

你應該使用上的變化和力變化的onkeyup檢查當前值。

錯誤,你有:

1-您正則表達式應該是相反的,你目前的一個檢查,如果值包含任何這些,但你希望你的價值,沒有其他價值。

2-你應該像這樣\ /以避免斜槓(/)字符,以便它不會被假定爲正則表達式的結尾,其餘的成爲修飾符!

例子:

document.getElementById('date').onchange = function(){ 
    var regex = /[^\d\/]/g; 
    if(regex.test(this.value)) {console.log(false); return false;} 
    else {console.log(true); return true;} 
}; 

document.getElementById('date').onkeyup = function(){ 
    this.onchange(); 
}; 

DEMO

注:請確保您驗證整個日期DD/MM/YYYY或無論你的格式是,前sumission