工数や金額の値を入力する目的で、
整数と小数のみを入力できるようにし、それ以外の文字は
不正文字として入力できないようにしたいと思っております。
また、".123"や"0..5"や"1.2.3"といった値も不正文字とみなしたい
です。不正文字が入力された場合は、アラートで注意をうながしたい
と思っています(再入力をうながす)。じつは、このサイトの
同じくJavaScriptの質問コーナーで4月1日18時台に、
「小数点以下第二位まで整数、小数ともに表示させたい」
という質問をさせていただき、皆様に助けていただいて解決したの
ですが、その「小数点以下第二位・・・」と同じ関数の中に、
不正文字は入力させない、というプログラムを組み込みたいと
考えています。
もしよろしければ、どなたか、お願い申し上げます。

A 回答 (1件)

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となります)
    • good
    • 0
この回答へのお礼

どうもありがとうございます!
これから実践に入りますが、
もしも今回のお答えに関して疑問が
でてしまったとしたら、
ご質問をさせていただくことがあるかと
思います。
そのときは、どうかよろしくお願い申し上げます。

お礼日時:2002/04/04 21:56

このQ&Aに関連する最新のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ