数字のみであることをはんだんするには?

[上に] [前に] [次に]
ばーばぱぱ 1999/06/24(木) 12:52:05
以前、半角英数字のみであることを判断するにはという質問が
あったのですが、数字のみであることを判断するには
どうしたらよいのですか?
../199811/98110064.htm

以下のようにしてみたのですが、駄目ですよね。
a=parent.No1.NowObj.value
if($a=~/[^\0-9]/) {
alert("ダメ")
}
else {
alert("OK")
}

Tmb 1999/06/24(木) 13:02:48
この条件式はPerlのものですよね? JavaScriptではisNaN()で可能です。

http://www.tohoho-web.com/js/builtin.htm#isNaN

ばーばぱぱ 1999/06/24(木) 13:19:23
[[解決]]
Tmbさんありがとうございます。
無事解決しました。
JavaScriptとPerlをごちゃまぜにして考えていました。
勉強不足ですね・・・(涙)

Tmb 1999/06/25(金) 11:40:45
カンマ処理をやってて気付いたのですが,NN3では例えば
parseFloat("100,000")やparseFloat("100abc")は,最初に数字以外の
文字が現れるまでの文字列を判断するらしく,共に100を返してしまい
isNaNでの判断が上手くできないようです。

回避法として
Num=parseFloat(str)
if (Num.toString() != str )alert("Not a Number!")
というのを考えました。
これなら大抵の場合は問題ないのですが,今度は例えば
str="1.000"
などの場合,parseFloat(str)=1 と,小数部がなくなってしまうことで
はじかれてしまうという問題が。

何かいい解決法がないでしょうかね。

Nobu3 1999/06/25(金) 17:04:00
for(i=0;i<hoge.length;i++){
if(-1!='0123456789'.indexOf(hoge.charAt(i)))continue;
alert('Error!!!');
return;
}
return hoge;

数字としてでなく、文字で扱うとこうなりますが、いかがでしょう?

Tmb 1999/06/25(金) 17:13:30
>文字で扱う
やっぱこれしかないですかね。使用可能文字にピリオドと負号を加えて。

この手も考えはしたんですけど "1.2.3.4"なんて場合に対応してくれないので。
これと上のを組み合わせれば一応可能でしょうけど,それも何となく野暮ったく
思えるので,他に何かいい手はないかと思いまして。

たこすけ 1999/06/25(金) 19:11:58
if(str*0 != 0) alert("No");

0を掛けた結果が0なら数字。
しかも、NN3だと数字以外を計算させた瞬間
アラートより先にエラーを出してくれる。(←駄目じゃん)

Nobu3 1999/06/26(土) 00:53:06

先にピリオドだけ見るっていう手もある。
2つ見つかった時点でアウト。
あんまりきれいじゃないけど。

ついでで申し訳ないですが、16進数のチェックはどうやってます?
僕はこの方法(文字扱い)を使っていたので、大文字を見逃したりしたんですが(笑)

Tmb 1999/06/29(火) 10:39:14
ピリオドの数を見るなら .lastIndexOf(".") != .indexOf(".") もいいかもしれませんね。
でもそれだと・・・うーん,例外を考えていくと肥大していきそう。
str != Num.toString() を基調にするのが,いちばん例外が少なそうですね。
普段はそれを使うとして,後はケースバイケースで考えるのがいいのかな。

16進数チェックはおっしゃる通り文字列でチェックする方が簡単かも。ピリオドもないし(笑)
もちろん比較用の文字列を0123456789aAbB・・・とするか,toLowerCase()などを
付けての話ですが。

[上に] [前に] [次に]