我正在执行日期验证,现在我正在做该用户只能输入numbers
,/
和backspace
所以现在我想在正则表达式中再添加2个键。我想添加delete
和arrow 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 :(得分:12)
如果按下了箭头键,删除键和退格键,则可以跳过输入验证
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();
}
}
答案 1 :(得分:1)
你应该使用on change并强制更改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或格式是什么
答案 2 :(得分:-1)
为什么不直接检查元素的实际值,而不是创建值的按键?
您可以使用oninput
事件。