• ベストアンサー

変数の中は文字列か数値か調べたい。

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

No.4 です。 すいません。 ご指摘の通り、. の前に \ が必要です。 if( /^-?\d+\.?\d*$/ ) { }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (7)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.8

CPANのRegexp::Commonを使って $x =~ m{^$RE{num}{real}$}

vvat2
質問者

お礼

皆様ご回答ありがとうございました。 やはりどれも正規表現を使いますね。 BLUEPIXY様。何度も回答していただき、さらにモジュールを紹介していただきありがとうございました。 ポイントの件ですが一番最初によい回答をいただいた、kentarou2333様に20。 次に一番に回答をいただいたBLUEPIXY様に10。 ということにさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.7

ちょっと頑張ってみる: /^[+-]?(0[0-7]*|0x[0-9a-f]+|[1-9]\d*|(0\.?|[1-9]\d*|0?\.\d+|[1-9]\d*\.\d*)e[+-]?\d+$/i; わけわからん.

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

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

vvat2
質問者

補足

皆様ご回答ありがとうございます。 正規表現が一番手っ取り早いようですね。 Tacosan様。 たとえば、Perlと同じく文字列と数値を区別しないASP言語では IsNumeric() という関数があります。これは、 val1 = "3" val2 = "文字列" というように、変数に値を代入しておいて、 IsN = IsNumeric(val1) とすると、変数IsNにはTrueが戻ります。 IsN = IsNumeric(val2) とすると、変数IsNにはFalseが戻ります。 つまり数値と評価できる文字列にはTureを返します。 これと同じような関数等を探しているのです。 まだいろいろな方法を知りたいので、「私はこうしてるよ」という方がおられましたら、ご回答よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

正規表現の場合は、下記のものがいいです。 if( /^-?\d+.?\d*$/ ) { } 他の方の場合は、負の数や、一桁の数字では問題が起こってしまうようです。

vvat2
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。
  • omni2
  • ベストアンサー率53% (33/62)
回答No.3

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";

全文を見る
すると、全ての回答が全文表示されます。
  • omni2
  • ベストアンサー率53% (33/62)
回答No.2

自信はありませんが、正規表現であらわすなら、 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"; これでいちおうできそうです。他の方の回答も参考にしたほうがいいです。便利な関数などあるかもしれません。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列から、4桁ないし6桁数値だけ抜き出す。

    テキスト文字列内にある、4桁~6桁 の連なる数値だけ抜き出したいです。 なにかいい関数とかないでしょうか。 例) 適当な文字列1234その他の文字列567890AZKNBU79ddAflP@K           ↑            ↑          ここと        この部分だけ抜き出し、 これらを適当な変数に代入。

    • ベストアンサー
    • Perl
  • VC++ の数値代入について。

    馬鹿らしい質問で申し訳ないのですが。。。 タイトルどおり、「数値代入」が分かりません。 たとえば文字列(?)文字は(?) strcpy(ホスト変数1," "); ですよね? じゃあ、数値はどのようにしてホスト変数に代入してあげれば いいのでしょうか? この質問を見て笑っちゃった人、助けてください~ よろしくお願いいたします。

  • Excelで数値が文字列になっています

    Excel2010で「このセルにある数値がテキスト形式か、またはアポストロフィで始まっています」という警告が表示されたりして、計算が出来ません。 打ち直ししたり、「エラーチェックルール」で「文字列形式の数値、、またはアポストロフィで 始まる数値」のチェックを外したりして計算は出来るようになります。 「表示形式を変えてもセルの中の値は変化しません。数値データは数値のまま、文字列データは文字列のままです。」とは本当ですか? 本当ならば、数字の保存形式が文字列データかどうかを確かめる方法はありますか? なお、ISNUMBERという関数ではTRUEと出ます。

  • (JavaScript)変数や文字列難しい

    JavaScript 第1問目 // [変数 - 右辺が変数を使った式1] // ---------------------------------------- // 変数sに、変数piの値に変数rの値を2回掛け合わせた値を代入してください let pi = 3.14; let r = 5; ×let s = ; console.log("円の面積は" + s); ※×は間違い。 第2問目 // ---------------------------------------- // [文字列 - 大文字に変換1] // ---------------------------------------- // 変数cの文字を大文字に変換して出力してください let c = "p"; ×console.log(toUpperCase+()); ※×は間違い。 第1問目 ×let s = ;のところですが、let s = (3.14*5)+(3.14*5);でも間違いです。変数sに、変数piの値に変数rの値を2回掛け合わせた値の計算方法やコードは何でしょうか? 第2問目 ×console.log(toUpperCase+());のところですが、console.log(toUpperCase+("p"));やconsole.log(toUpperCase+("c"))は違います。console.log{toUpperCase+}も違います。大文字に変換するコードは何でしょうか?

  • 数値でも文字列でもない? 【Excel】

    シート内の値はCSV形式のものをコピーしたもので、文字列の表示(左詰め)になっています。 因みにセル間の足し算や引き算はできます。 しかし 数値の最大値を計算しようと思い MAX関数にて計算しても”0”の表示 文字列なのかと思い MAXA関数にて計算しても”0”の表示 関数(その他SUMやCOUNTA)での計算ができません。 そこで質問ですが、 この場合のセルの表示形式はどうなっているのでしょうか? また計算する方法を教えて下さい。 お願いします。<(_ _)>

  • 文字列をint型に変換したいのですが

    文字列をint型に変換して、計算に使用したいのですが うまくいきません。 char moji[0] = '1' moji[1] = '2' moji[2] = '3' この文字列をひとつずつint型の変数に代入したいのですが atoi関数を使用した場合、文字列全ての値が変換されてしまいます。 どうしたらいいのでしょうか? お答えいただけるとありがたいです。

  • VBA 文字列と数値の混在

    Excel VBA 独学中の初心者です。独学中の初心者です。 データ型に関する以下の疑問についてお答えいただける方、よろしくお願い致します。 疑問1.「文字列 & 数値」でエラーにならず、結果は文字列になるようですが、これはVBAの規則上当たり前のことでしょうか。 疑問2.InputBox関数の戻り値は、Typeを省略した場合文字列と思いますが、これを数値型の変数に代入してもエラーは発生しませんでした。これも当たり前のことでしょうか。 具体例は以下です。 ------------------ Option Explicit Sub 文字列と数値の疑問() '初期設定 Cells.Clear Range("A1").Select '本題はここから Dim i As Long Dim j As Long Dim strRange As String Dim strInput As String '------------------ '疑問1の例 i = 2 strRange = "A" & i '疑問1:文字列と数値変数(長整数型)を文字列連結演算子で連結してもエラーにならない。・・・なぜ? '結果は1つの文字列→strRange ="A2" '例 Range(strRange).Select '動作OK Range(strRange) = i '動作OK '------------------ '疑問2の例 strInput = InputBox("選択行を入力してください", , "4") 'strInputは文字列型変数 j = strInput '疑問2:数値変数(長整数型変数)に文字型変数を代入してもエラーにならない・・・なぜ? '結果は長整数型変数(数値) j=4 (Input BOX をデフォルトでOKしたとき) '例:以下の両方とも動作OK '1) strRange = "A" & strInput '文字列 & 文字列 →文字列 strRange ="A4";疑問なし Range(strRange).Select '動作OK Range(strRange) = strInput '2) Cells.Clear '確認用にクリアスクリーン Range("A1").Select '確認用にセル位置移動 strRange = "A" & j '文字列 & 数値 →文字列 strRange ="A4";疑問1と同じ Range(strRange).Select '動作OK Range(strRange) = j '動作OK End Sub

  • UNIXで数字の文字列を、数値に変換するには?

    UNIXで、数字のみの文字列を、その文字列で表される数値に変換して変数に代入したいのですが、どうすればいいでしょうか? つまり、 VALUE=`echo 22j4444j33 | awk -F'j' '{print $1}'` <VALUEに入った"22"を22の数値に変換> exit $VALUE というようなことがしたいです。 よろしくお願いします。

  • 書いた文章を改行など含めて文字列として変数に代入するには?

    あいうえお かきくけこ さしすせそ を変数に文字列として代入したいのですが、 my $string = "あいうえお\nかきくけこ\nさしすせそ\n"; などと改行文字を自分で入れたりといったことをせず、 変数に文字列として代入する方法を教えてください。 print <<END; あいうえお かきくけこ さしすせそ END という方法があるのは分かったのですが。。。

    • ベストアンサー
    • Perl
  • String型の変数に代入されている2つの文字列を論理演算したいです。

    String型の変数に代入されている2つの文字列を論理演算したいです。 上記の通りなんですけど 例えば String a = "あいうえお"; String b = "aiueo"; このような二つの文字列を論理演算したあと 16進数の文字列としてあらたな変数(String型)に代入したいのですが どのように記述すればよろしいでしょうか? 初心者なものでわかりやすく説明していただけるとありがたいです。

    • ベストアンサー
    • Java
起動せず/常駐ソフトの停止後
このQ&Aのポイント
  • 筆王Ver.27をインストール後、立ち上がらないので、常駐ソフト停止手順に従ったところ、PINを使っての起動できなくなった。それ以降、復帰できず。
  • 質問内容は、筆王Ver.27をインストール後に起動ができなくなり、常駐ソフトの停止手順を試したが、PINを使った起動ができなくなりました。現在は復帰できていません。
  • 起動せず/常駐ソフトの停止後についての質問です。筆王Ver.27をインストールした後に起動できなくなり、常駐ソフトの停止手順を試しましたが、PINを使った起動ができなくなりました。現在は復帰できない状況です。
回答を見る

専門家に質問してみよう