現在、あなたはテストを受けています
(a < 48) || (a > 57)
無効な値の場合。だから私はそれらを変更します:
(a < 0 ) || (a > 255)
また、2.3 のような非整数入力で何をするかを検討する必要があるかもしれません - 丸めるか無効として扱うかのどちらかです。
現在、Kelvin Mackay が指摘しているように、入力値ではなく keypress イベントで検証を実行しているため、 onkeypress を に変更しallownums(this.value)
ます。
アラートを div の警告に変更し、検証を使用して送信ボタンを有効/無効にすることをお勧めします。ポップアップはほぼすべての状況で非常に煩わしいためです。
(コメントで要求されたように) 無効なエントリが作成されたときに入力をクリアすると、ユーザーにとってかなり煩わしくなります。キーが押されて数字が追加され、入力が無効になるとすぐに、入力全体がクリアされます。ただし、コードは次のようになります。
if(!validnum(this.value))
this.value="";
したがって、入力タグで:
<input type='text' id='numonly'
onkeyup='if(!validnum(this.value)) this.value="";'>
関数を次のように変更します。
function validnum(a) {
if(a < 0 || a > 255)
return false;
else
return true;
}
またはより簡潔に:
function validnum(a) {
return ((a >= 0) && (a <= 255));
}
編集:必要に応じて、ボックスを警告してクリアするには:
function validOrPunchTheUser(inputElement) {
if(!validnum(inputElement.value)) {
window.alert('badness'); // punch the user
inputElement.value = ""; // take away their things
}
}
<input type='text' id='numonly'
onkeyup='validOrPunchTheUser(this)'>
ただし、他の回答を読むと、明らかにオクテットを検証しようとしています(たとえば、IPアドレスで)。もしそうなら、それは今日私を通り過ぎたので、質問でそれを述べてください. オクテットの場合:
function validateIPKeyPress(event) {
var key = event.keyCode;
var currentvalue = event.target.value;
if(key < 96 || key > 105)
{
event.preventDefault();
window.alert('pain');
return false;
}
else if(currentvalue.length > 2 ||
(currentvalue.length == 2 &&
key > 101)) {
window.alert('of death');
event.preventDefault();
event.target.value = event.target.value.substring(0,2);
}
else
return true;
}
入力タグを使用:
<input type='text' id='octet'
onkeydown='validateIPKeyPress(event)'>
ただし、アラートは使用しないでください。アラート行を削除すると、無効な入力がサイレントに防止されます。onkeydown を使用するように変更したことに注意してください。これにより、無効なキーの押下を検出して、値がまったく変更されないようにすることができます。入力をクリアする必要がある場合は、 を実行しますif(!validateIPKeyPress(event)) this.value = "";
。