JavaScript - 整数のテスト
質問
ユーザーが自分の年齢を入力するためのテキストフィールドがあります。私はJavaScriptでこのフィールドにいくつかのクライアント側の検証を行おうとしています。サーバーサイドの検証はすでに行っています。しかし、ユーザーが実際の整数を入力したかどうかを確認することができないようです。現在、以下のコードを試しています。
function IsValidAge(value) {
if (value.length == 0) {
return false;
}
var intValue = parseInt(value);
if (intValue == Number.NaN) {
return false;
}
if (intValue <= 0)
{
return false;
}
return true;
}
奇妙なことに、私はテキストボックスに"b"のような個々の文字を入力し、このメソッドはtrueを返します。ユーザーが整数だけを入力していることを確認するにはどうすればよいでしょうか。
ありがとうございます。
どのように解決するのですか?
アップデイト
エラーの出ていたコードを修正し、Varに キー を使って押されたキーのコードを保存するようにしました。 キーコード と どの は、ブラウザに依存します。
var key = e.which || e.keyCode;
Donald.McLean ありがとうございます :)
入力中に数字を書いているかどうかをチェックしたい場合(そして入力フィールドに他の文字を書くのを避けたい場合)、このシンプルな関数を使用することができ、許可する要素(これはフィルタリングしたいものを含みます)を定義することができます。この方法では、整数だけでなく、例えば特定の文字群を選択することができる。この例は、jQueryを使用して入力フィールドに取り付けています。
$('#myInputField').keypress(function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) && // Interval of values (0-9)
(key !== 8) && // Backspace
(key !== 9) && // Horizontal tab
(key !== 37) && // Percentage
(key !== 39) && // Single quotes (')
(key !== 46)) // Dot
{
e.preventDefault();
return false;
}
});
定義されたキー以外を使用すると、フィールドに表示されません。また、最近はAngular.jsが強くなってきているので、Webアプリの任意のフィールドにこれを行うためのディレクティブを作成することができます。
myApp.directive('integer', function()
{
return function (scope, element, attrs)
{
element.bind('keydown', function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) && // Interval (0-9)
(key !== 8) && // Backspace
(key !== 9) && // Horizontal tab
(key !== 37) && // Percentage
(key !== 39) && // Single quotes (')
(key !== 46)) // Dot
{
e.preventDefault();
return false;
}
});
}
});
しかし、もし
ng-repeat
を使い、このディレクティブをあるフィールドの数だけ適用する必要がある場合はどうなりますか?さて、あなたは上のディレクティブを
真
または
false
の値で、どのフィールドが影響を受けるかを決定できるようにします。
myApp.directive('rsInteger', function() {
return {
restrict: 'A',
link: function (scope, element, attrs) {
if (attrs.rsInteger === 'true') {
element.bind('keydown', function(e)
{
var key = e.which || e.keyCode;
if (!(key >= 48 && key <= 57) && // Interval (0-9)
(key !== 8) && // Backspace
(key !== 9) && // Horizontal tab
(key !== 37) && // Percentage
(key !== 39) && // Single quotes (')
(key !== 46)) // Dot
{
e.preventDefault();
return false;
}
});
}
}
}
});
この新しいディレクティブを使うには、例えば次のような入力タイプのテキストで行うだけです。
<input type="text" rs-integer="true">
お役に立てれば幸いです。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】.keyCodeと.whichの比較
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] JavaScriptを使用してHTML要素に属性を追加/更新するには?
-
[解決済み] TypeScriptプロジェクトで既存のC#クラス定義を再利用する方法
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] JavaScriptの文字列プリミティブとStringオブジェクトの違いは何ですか?