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

タイトルのとおり、変数に代入された値が
文字列か数値か調べたいのですが、
関数、モジュール、その他の方法等ありましたら
教えてください。よろしくお願いします。

A 回答 (8件)

No.4 です。



すいません。
ご指摘の通り、. の前に \ が必要です。

if( /^-?\d+\.?\d*$/ ) {
}
    • good
    • 0

CPANのRegexp::Commonを使って


$x =~ m{^$RE{num}{real}$}
    • good
    • 0
この回答へのお礼

皆様ご回答ありがとうございました。
やはりどれも正規表現を使いますね。

BLUEPIXY様。何度も回答していただき、さらにモジュールを紹介していただきありがとうございました。

ポイントの件ですが一番最初によい回答をいただいた、kentarou2333様に20。
次に一番に回答をいただいたBLUEPIXY様に10。
ということにさせていただきます。

お礼日時:2005/04/14 01:19

ちょっと頑張ってみる:



/^[+-]?(0[0-7]*|0x[0-9a-f]+|[1-9]\d*|(0\.?|[1-9]\d*|0?\.\d+|[1-9]\d*\.\d*)e[+-]?\d+$/i;

わけわからん.
    • good
    • 0

数値か文字列かを区別したい状況ってのがよくわからないんですが, 何をしたいんですか?

この回答への補足

皆様ご回答ありがとうございます。
正規表現が一番手っ取り早いようですね。

Tacosan様。
たとえば、Perlと同じく文字列と数値を区別しないASP言語では IsNumeric() という関数があります。これは、

val1 = "3"
val2 = "文字列"
というように、変数に値を代入しておいて、

IsN = IsNumeric(val1)
とすると、変数IsNにはTrueが戻ります。

IsN = IsNumeric(val2)
とすると、変数IsNにはFalseが戻ります。
つまり数値と評価できる文字列にはTureを返します。

これと同じような関数等を探しているのです。

まだいろいろな方法を知りたいので、「私はこうしてるよ」という方がおられましたら、ご回答よろしくお願いします。

補足日時:2005/04/13 16:22
    • good
    • 0

正規表現の場合は、下記のものがいいです。


if( /^-?\d+.?\d*$/ ) {
}

他の方の場合は、負の数や、一桁の数字では問題が起こってしまうようです。

この回答への補足

ご回答ありがとうございます。
正規表現あまり使ったことがないので、
マニュアル見ながら解読して意味を理解できましたが、
/^-?\d+.?\d*$/
真ん中のあたりの "." を "\." としなくてもいいんでしょうか。ここだけ引っかかっています。

補足日時:2005/04/13 16:55
    • good
    • 0

No2です。

すみません。小数点に対応しておりませんでした。
こちらのほうがいいかもしれません。自信はありませんが・・
my $a = "12345文字";
my $b = 12345;
my $c = 123.567;

if( $a =~ /^\d+\.?\d+$/){print '$aは数字です';}
else{print '$aは文字です';}
print "\n";
if( $b =~ /^\d+\.?\d+$/){print '$bは数字です';}
else{print '$bは文字です';}
print "\n";
if( $c =~ /^\d+\.?\d+$/){print '$cは数字です';}
else{print '$cは文字です';}

print "\n";
    • good
    • 0

自信はありませんが、正規表現であらわすなら、



my $a = "12345文字";
my $b = 12345;

if( $a =~ /^\d+$/){print '$aは数字です';}
else{print '$aは文字です';}
print "\n";
if( $b =~ /^\d+$/){print '$bは数字です';}
else{print '$bは文字です';}
print "\n";

これでいちおうできそうです。他の方の回答も参考にしたほうがいいです。便利な関数などあるかもしれません。
    • good
    • 1

Perlの変数は、文字列と数値を区別しません。


なので、
$x="1.23";
は、文字列としてセットしているつもりですが、
文字列としても数値としても有効で、
文字列として評価されるときは文字列として
数値として評価されるときは数値として評価されるので、それを区別することはできません。(と思う)
便宜上数値と判断できるものを数値と見なすということであれば、
sub isNum($){
my ($x) = @_;
return $x eq $x * 1;
}
とかすればいいかと思いますが、
うまくいかない場合もあるかもしれません。
    • good
    • 0

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