9

私は日付の検証を実行していますが、今はユーザーが入力できるのは だけnumbersなので、正規表現にさらに 2 つのキーを追加したいと考えています/。追加しbackspaceたいので、正規表現で何をすべきかを変更します。これは私のコードです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 に答える