独自のフォーム検証を作成するのはいいことだと思いました。電話番号をテストするまでのコードは問題ありません。数字のみを許可し、桁数を検出するためにJavaScriptを使用しています。数字が 3 か 7 の場合は、ダッシュを追加します。最初のダッシュを入力した後、ダッシュが文字列に含まれ、2 番目のダッシュが文字列の位置 8 になるため、7 に設定されています。これで問題なく動作しますが、ユーザーが間違った数字を入力してダッシュが表示された場合、ユーザーがそれをバックスペースしようとすると、文字列の長さが 3 または 7 に戻っていることがわかり、自動的にダッシュがそこに戻されます。ユーザーが一度に 1 スペースずつ戻ってエラーを修正できるようにします。バックスペースを押したままにすると、削除されます。分割と部分文字列を使用してみましたが、どのように機能するかがわからないため、正しく機能します。
HTML
<form>
<input type = 'text' name = 'txtPhone' id = 'txtPhone' onkeypress = 'return numbersOnly(event)' onkeyup = 'validateForm(this.id)'/>
</form>
JavaScript
function numbersOnly(e){
var unicode = (e.charCode) ? e.charCode : e.keyCode;
if (unicode == 8
|| unicode == 9
|| (unicode >= 48 && unicode <= 57)
)}
return true;
}else{
return false;
}
}
function validateForm(id){
var id = document.getElementById(id);
var unicode = (event.charCode) ? event.charCode : event.keyCode;
// first add slashes after third and sixth digit
if (id.value.length == 3
|| id.value.length == 7
){
var newValue = id.value += "-";
id.value = newValue;
}
// if backspace is pressed, remove the dash
if (unicode == 8){
var value = document.getElementById(id).value;
value = value.substring(0, value.length - 1);
}
}