2

次のような文字列があります。

$string = 'e.g. 25.32';

数字だけ抜き出したい(25.32)

数値を囲むテキストは、数値以外の可能性があります。

4

4 に答える 4

3

次のようなものを使用できます:

<?php
     $str = "e.g. 25";
     $val = (int)$str;
?>

しかし、それは最善の解決策ではありません。


「より強力な」普遍的な代替手段は...

コード : (更新)

<?php
    $str = "e.g. 25.32";

    preg_match("/([0-9]+[\.,]?)+/",$str,$matches);

    $val = $matches[0];

    echo $val;
?>

出力:

25.32

機能として:(更新)

<?php
      function getInt($str)
      {
            preg_match("/([0-9]+[\.,]?)+/",$str,$matches);
            return $matches[0];
      }
?>

使用法 :

<?php
      $val = getInt("e.g. 25.32");
?>
于 2012-04-14T18:47:01.277 に答える
2

数値が単純な場合:

([0-9]+(?:\.[0-9]+)?)

次に、文字列の最後でこれを一致させます。

$string = 'e.g. 25.32';
$number = preg_replace('~^.*?([0-9]+(?:\.[0-9]+)?)$~', '$1', $string);

これにより$numbercontainが作成され"25.32"、float 値が必要な場合は float に変換されます。

$float = (float) $number;

このコードは、実際に数字がある場合にのみ機能します。確信が持てない場合は、最初にテストしてください。

$string = 'e.g. 25.32';
$number = NULL;
$hasNumber = preg_match('~([0-9]+(?:\.[0-9]+)?)$~', $string, $matches);
if ($hasNumber)
{
    list(, $number) = $matches;
}

数値が PHP のように数値にできる場合:

([+-]?INF|[+-]?(([0-9]+|([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*))|([0-9]+|(([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*)))[eE][+-]?[0-9]+))

したがって、実際に一致させる必要があるものに注意してください。

于 2012-04-14T19:01:54.117 に答える
1

preg_matchを使用した文字列の形式がわかっている場合は、正規表現を使用できます

于 2012-04-14T18:46:46.187 に答える
1

負の数でも機能する私の古い関数:

function getNumber($str){
    return floatval(preg_replace('/^[^\d-]+/','',$str));
}
于 2012-04-14T18:59:04.187 に答える