テキストボックスに数値入力のみを受け付けるJavaScriptおよびjQueryコードをいくつか記述しました。 しかし、これでは不十分です。入力を特定の数値に制限する必要があります。JavaScriptを使用してHTML入力の特定の文字のみを許可する
このテキストボックスはSSN番号(スウェーデン語SSN)を扱う必要があり、19または20から始める必要があります。これらの番号から始めるようにしたいが、これに制限することはできません。
$('input.SSNTB').keydown(function (event) {
var maxNrOfChars = 12;
var ssnNr = $('input.SSNTB').val();
if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 ||
// Allow: Ctrl+A
(event.keyCode == 65 && event.ctrlKey === true) ||
// Allow: home, end, left, right
(event.keyCode >= 35 && event.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
else {
// Ensure that it is a number and stop the keypress
if (((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105))) {
console.log("if-1");
event.preventDefault();
}
if (event.shiftKey == true) {
console.log("if-3");
event.preventDefault();
}
//rules to make sure the textbox starts with correct number
if (event.keyCode != 49 || event.keyCode != 50 || event.keyCode != 97 || event.keyCode != 98) {
console.log("if-4, Keycode:" + event.keyCode);
event.preventDefault();
}
}
});
これをテストするために最後のif-caseが実行されます。それは計画どおりに実行されますが、それはそのために構築された入力文字を制限しません。
ヒントやアイデアはありますか?
この問題のRegExを考慮しましたか?私はあなたがそれからもっときれいなコードを手に入れることができると信じています::) – FarligOpptreden
私は、あなたの 'keydown'ハンドラを華麗にしようとしないことをお勧めします - あなたは文字の始めをカーソルがどこにあるか分からない限り、文字列。文字列のどこにでも表示できる文字に制限し、 'change'や' blur'ハンドラを使って正規表現を使って全体のフォーマットを検証してください。これは、ユーザがペースト、カット、 n'drops(これらはすべて、 'keydown'をトリガーせずに実行できます)。 – nnnnnn
SSNはハイフンでも9桁ですが、文字列は11文字を超えてはいけません。 maxNrOfCharsが12に設定されているのはなぜですか? – Abbas