- 締切済み
テキストに入力できる文字( 値 )を限定したいのですが・・・
工数や金額の値を入力する目的で、 整数と小数のみを入力できるようにし、それ以外の文字は 不正文字として入力できないようにしたいと思っております。 また、".123"や"0..5"や"1.2.3"といった値も不正文字とみなしたい です。不正文字が入力された場合は、アラートで注意をうながしたい と思っています(再入力をうながす)。じつは、このサイトの 同じくJavaScriptの質問コーナーで4月1日18時台に、 「小数点以下第二位まで整数、小数ともに表示させたい」 という質問をさせていただき、皆様に助けていただいて解決したの ですが、その「小数点以下第二位・・・」と同じ関数の中に、 不正文字は入力させない、というプログラムを組み込みたいと 考えています。 もしよろしければ、どなたか、お願い申し上げます。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- zzzzzz
- ベストアンサー率61% (70/113)
Number()でできると思います。 Number(str)とすると、文字列strが数値に変換されます。 もしstrが数値として不適切な場合にはこの結果はNaN(Not a Number)という特別な数になりますので、 isNaN(Number(str)) で不正な入力かどうかを判定できます。例えば isNaN(Number("1")) == false isNaN(Number("1.2")) == false isNaN(Number("a")) == true isNaN(Number("4.5t")) == true などとなります。 ちなみにparseInt()、parseFloat()は"123a"等の途中まで数値として解釈できる文字列に対して甘いですので、この目的では使用できません。 また、".123"はこの方法では判定できません。これは通常では数値として正しいとされる表記だからです。 この手の数値を考慮する場合には、処理としては次の3通りが考えられます。 1.".5"と入力されたら自動的に"0.5"に変える。"a"等に対しては入力をクリアする 2.".5"と入力されたら自動的に"0.5"に変える。"a"等に対しては警告を表示する 3.".5"や"1e4"等の入力を許可しない 1は function normalizeAsNumber(x) { var tmp = Number(val); return isNaN(tmp) ? "" : tmp.toString(); } を使用すればできます。 2はreturn文の""の部分を(alert("警告"),"")に変更すればできます。 3は正規表現を使用するのが簡単です。 /^\d*$|^\d+\.\d+$/ という表現で"", "12", "34.22"等にマッチし、".5", "1.", "1e4"等にはマッチしませんので、 str = str.match(/^\d*$|^\d+\.\d+$/); などとすればよいでしょう。(許可されない文字列の場合にはstr==nullとなります)
お礼
どうもありがとうございます! これから実践に入りますが、 もしも今回のお答えに関して疑問が でてしまったとしたら、 ご質問をさせていただくことがあるかと 思います。 そのときは、どうかよろしくお願い申し上げます。