その入力と最新のキープレスを組み合わせた値が正規表現を渡さない場合、ユーザーが入力ボックスの文字列を変更できないようにするにはどうすればよいですか?
個々の文字をテストするために keypress を使用する方法に関するあらゆる種類の例を見てきましたが、押されたキーだけでなく、値全体を正規表現に一致させる必要があります。
たとえば、テキスト ボックスは次の正規表現に準拠する必要があります。
"^023-[0-9]{0,7}$"
したがって、に変更"023"
したい場合は、キャラクター"23"
を削除するときに停止する必要があります。after0
を削除する場合も同様です。また、 の後に 7 つ以上の数字を入力すると、それらを停止する必要があります。これはぼかしでは実行できません。キーストロークごとに実行する必要があります。パフォーマンスは問題ではありません。-
023
023
jQuery で keypress() イベントを使用し、次のように入力要素の値を取得するとします。
$(this).val()
次に、キーを押す前の値のみを取得します - 後ではありません。したがって、正規表現に対して入力をテストする方法はありません。押されたキーをこの文字列に単純に追加することはできません。これは、文字列の最も右側にキーを入力しているだけであると仮定できないためです。
キーダウン/キーアップイベントを調べました.キーアップは、ユーザーがキーを押した後の入力の現在の値を提供しているようですが、入力したものの影響を取り除くのは難しいと思います...どのキープレス()見た目には問題ありません。
var regex = new RegExp("^023-[0-9]{0,7}$");
$("#number").keyup(function(event) {
var number = $(this).val();
if(!regex.test(number)) {
event.preventDefault();
return false;
}
});
上記のコードは機能しません。keypress() を使用すると、入力した内容を停止できるように見えますが、keyup を使用すると、現在の値を取得できます。両方を行うソリューションが必要です;)
この問題は、ブラウザに MVC アーキテクチャがないことが原因です。モデルはビューです。残念ながら、ビューが更新される前に更新されたモデルを検証することはできません...更新されたモデル データを取得するには、keyup イベント中にビューを更新する必要があるためです...そして、それまでに更新を防ぐには遅すぎますすでに更新されているため、表示します。