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

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

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が見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q整数が入力されたときに、小数点以下2桁まで表示させたいのですが

かなり未熟者で恐縮ですが、
たとえば表のセルに1と入力すると、1.00と表示させる
ようにするにはどうしたらよいでしょうか。
四捨五入とちがって、Web上の情報も乏しく、
困っております・・・。
どなたか、ご指導お願い申し上げます。

Aベストアンサー

こんにちは。
えっと、用途がイマイチわからないのですが、表のセル、というのはテーブルのセルの事ですか?

だとすると、以下は全く役に立たないんですが、フォームの場合でしたら↓で実現できます。

<html>
<head>
<title>小数点</title>
<script language="JavaScript"><!--
function checkNum()
{
n = document.checkFm.num.value;
n=n+"."
n = n.split(".")[0]+"."+(n.split(".")[1]+"00").substring(0,2);
document.checkFm.num.value = n;}
// --></script>
</head>
<body>
<form name="checkFm">
入力:<input type="text" name="num"><br>
<input type="button" onClick="checkNum()" value="チェック"><br>
</form>
</body>
</html>

※小数点以下は二桁に制限する事で実現してます。
 5.2358など、入れて、チェックボタンを押すと、5.23になります。
 5.2などの場合は、5.20になります。

もし、テーブルのセルに、HTMLの編集時に入れた数字を変化させるとすると、その動作遷移(そうすることで、HTML編集を簡略化したいのかな・・・とも思うのですが、それだとソースが重たくなるだけで、利点がなさそうに思えるのですが・・・)がわからないので、なんとも言えません(スミマセン)。

こんにちは。
えっと、用途がイマイチわからないのですが、表のセル、というのはテーブルのセルの事ですか?

だとすると、以下は全く役に立たないんですが、フォームの場合でしたら↓で実現できます。

<html>
<head>
<title>小数点</title>
<script language="JavaScript"><!--
function checkNum()
{
n = document.checkFm.num.value;
n=n+"."
n = n.split(".")[0]+"."+(n.split(".")[1]+"00").substring(0,2);
document.checkFm.num.value = n;}
// --></script>
</head>
<body>
<form name=...続きを読む

Q計算の結果、整数でも小数点以下2桁まで表示したい

HPのフォーム(a)に任意の数値を入れて、ボタンを押すと計算をする、というJavascriptで苦戦しています。

小数点以下を2桁までの表示にしたく、下のようにかきました。

function Cal()
{
inputValueA = document.fm.a.value - 0;
answer1 = Math.round( ( inputValueA ) * 3 * 100 );
answer2 = Math.round( ( inputValueA ) * 1.618 * 100 );
document.fm.answer1.value = answer1 /100;
document.fm.answer2.value = answer2 /100;
}

このままですと、aが1の場合、answer1は3、answer2は1.62と出ますが、answer1を3.00としたいのです。

toFixedを使うとできそうなことは分かったのですが、上の式にどのように使えば良いかわかりません。

もしお分かりの方がいらっしゃったら、どのようにしたら良いか、教えて頂けませんでしょうか。

宜しくお願いいたします。(初心者・独学です)

HPのフォーム(a)に任意の数値を入れて、ボタンを押すと計算をする、というJavascriptで苦戦しています。

小数点以下を2桁までの表示にしたく、下のようにかきました。

function Cal()
{
inputValueA = document.fm.a.value - 0;
answer1 = Math.round( ( inputValueA ) * 3 * 100 );
answer2 = Math.round( ( inputValueA ) * 1.618 * 100 );
document.fm.answer1.value = answer1 /100;
document.fm.answer2.value = answer2 /100;
}

このままですと、aが1の場合、answer1は3、answer2は1.62と出ますが...続きを読む

Aベストアンサー

document.fm.answer1.value = (answer1 /100).toFixed(2);
document.fm.answer2.value = (answer2 /100).toFixed(2);

参考URL:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

Q小数点入力チェック

以下の処理を入力チェックしたいのですが、どうしたら宜しいのでしょうか?お願いします。

num="1.999" →OK
num="1.11" →OK
num="1" →OK
num="11.11" →NG

if(!num.match(/[0-9]*\.[0-9][0-9][0-9]+/)){
alert("小数点形式[0.001~9.999]の範囲で入力してください。");
return;
}

Aベストアンサー

ちょっと意図が不明瞭な部分がありますが
・0<num<10
・numは小数点3桁まで
という条件でしたら

if (!num.match(/^[0-9](\.[0-9]{1,3})?$/)) {

だと思います。
正規表現は便利です。より調べられることをおすすめします。

参考URL:http://www.tohoho-web.com/js/regexp.htm#Expression

Q入力された文字を1文字ずつチェックする方法

入力された文字列内に、ある特定の文字が存在するかチェックをしたいと思っています。

例えば、
"abcde~fghi" というように入力された場合、
入力された文字列の中に~(チルダ)があったらエラーにするというような感じです。

1文字ずつチェックできる方法を教えていただきたいと思います。
よろしくお願いします。

Aベストアンサー

アルファベットの判別は下記↓でできるようです。

http://www.openspc2.org/reibun/javascript/regexp/003/index.html

参考URL:http://www.openspc2.org/reibun/javascript/regexp/003/index.html

Qボタンかリンクをクリックすると入力フォームに文字入力される仕掛け

ホームページ上でテキストボックスが1つあるのでそこに色名(赤色や青色)などの文字を、ボタンかリンクをクリックするだけで入力されるような仕掛けを作りたいです。
例えば「暖かい色」と書かれた文字かボタンをクリックすれば、テキストボックスに「赤色」、また「お空の色」なら「青」などが入力されるなどです。
多分javaベースが良さそうですが、探しても見つからなかったです。
宜しくお願いします。

Aベストアンサー

こんな感じですか?

---

<html>
<head>
<title>test</title>
<script type="text/javascript">
window.onload = function() {
var buttons = document.getElementById('colors').getElementsByTagName('button');
for (var i = 0, n = buttons.length; i < n; i++) {
buttons[i].onclick = function() {
document.getElementById('result').value = this.value;
}
}
}
</script>
</head>

<body>

<form id="colors" action="#">
<button type="button" value="赤色">暖かい色</button>
<button type="button" value="青色">お空の色</button>
<input id="result" type="text" value="" />
</form>

</body>
</html>

こんな感じですか?

---

<html>
<head>
<title>test</title>
<script type="text/javascript">
window.onload = function() {
var buttons = document.getElementById('colors').getElementsByTagName('button');
for (var i = 0, n = buttons.length; i < n; i++) {
buttons[i].onclick = function() {
document.getElementById('result').value = this.value;
}
}
}
</script>
</head>

<body>

<form id="colors" action="#">
<button type="button" value="赤色">暖かい色</button>
...続きを読む


人気Q&Aランキング

おすすめ情報