9

我正在执行日期验证,现在我正在做那个用户只能输入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>

感谢等待您的帮助。

4

3 回答 3

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();
 }   
}
于 2013-06-18T08:51:12.933 回答
1

您应该使用 on change 和 force 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();
};

演示

注意:确保在提交之前将整个日期验证为 dd/mm/yyyy 或任何格式

于 2013-06-18T08:55:39.987 回答
-1

为什么不只检查元素的实际值,而不是创建值的按键?

您可以oninput为此使用事件。

于 2013-06-18T08:44:04.883 回答