将删除和箭头键添加到正则表达式中

时间:2013-06-18 08:37:51

标签: javascript jquery

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

感谢您的帮助。

3 个答案:

答案 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事件。