プロが教える店舗&オフィスのセキュリティ対策術

Perl(Version 5.005_03) で、値が数値(小数点、負の数、指数を含む)か否かを判定したいのですが、うまくいきません。何かよい方法はないでしょうか?
お願いします。
【環境】sun4-solaris, apache

A 回答 (4件)

ああ、「?」の存在を忘れていました。


そうそう
if ($val =~ /^(-|\+|)\d+\.?\d*(E\+\d+|E\-\d+)?$/i){
だと、
-1.E+12
というのも引っかかります。
もちろんPerlとしては数値として扱われるので大丈夫ですが。
しかし、
-.5E+12
というのもPerl的には正しいはずなのに、こちらは引っかかりません。
-12E-4.5
-12E-.5
これらも正しいのにだめです。
どこまでのを求めますか?(^^;
if ($val =~ /^(-|\+)?(\d+\.?\d*|\d*\.?\d+)(E\+(\d+\.?\d*|\d*\.?\d+)|E\-(\d+\.?\d*|\d*\.?\d+))?$/i){
こうかもしれない・・・
    • good
    • 0
この回答へのお礼

すごいですぅ~!
判定したい値は全てOKでした♪

> どこまでのを求めますか?

十分ですっ。
本当に、本当にありがとうございました。

お礼日時:2002/06/27 16:21

 補足です。


 俺の#2の回答についてですが、プラスマイナスの符号に対する処理が抜けてます。ミスでした(^_^;

  if ( $val =~ /^(\+|\-)\.?\d+\.?\d*(E\+\d+|E\-\d+)?$) {

 いちおー別の方の回答が出ているようですが、念のためにフィックスしておきます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
アドバイスを頂いたおかげで、解決できました。
結局、

if ($val =~ /^(-|\+|)\d+\.?\d*(E\+\d+|E\-\d+)?$/i){

にしてみました。
もうちょっと、テストしてみてOKなら、これにします♪

お礼日時:2002/06/27 15:07

 Perl は、変数はすべて(VBでいうところの)バリアント型なので、タダで判別する関数はありません。


 指数を含むというのが面倒ですね(^_^;
 こういうのはどうでしょう。

  if ( $val =~ /^\d+\.?\d*(E\+\d+|E\-\d+)?$) {

 これで真なら数値ということになると思うんですが……。
    • good
    • 0
この回答へのお礼

ありがとうございます。

if ($val =~ /^\d+\.?\d*(E\+\d+|E\-\d+)?$/i){

でやってみました。
ただ、「-1e-007」というような値を判別すると、文字列と判定されてしまうのですが。。。
※「1e-007」は数値と判定されました。

お礼日時:2002/06/27 14:51

/^(-|\+|)\d+(\.\d+|)(e\-\d+(\.\d+|)|e\+\d+(\.\d+|)|e\d+(\.\d+|)|)/i



マッチングだとこんな感じ?
#「.25」なんて0を省く場合を除いて

もっとスマートに書けそうだが・・・
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございました。
上記のマッチングで判定してみると、「-1.00ee-7」が数値として判定されてしまいました。(;_;)
結局、i_am_alive さんと、deagles さんの回答を混ぜて

if ($val =~ /^(-|\+|)\d+\.?\d*(E\+\d+|E\-\d+)?$/i){

にしてみました。いまのところ、問題ないみたいです。
ありがとうございました。

お礼日時:2002/06/27 15:06

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