次のような文字列があります。
$string = 'e.g. 25.32';
数字だけ抜き出したい(25.32)
数値を囲むテキストは、数値以外の可能性があります。
次のようなものを使用できます:
<?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");
?>
数値が単純な場合:
([0-9]+(?:\.[0-9]+)?)
次に、文字列の最後でこれを一致させます。
$string = 'e.g. 25.32';
$number = preg_replace('~^.*?([0-9]+(?:\.[0-9]+)?)$~', '$1', $string);
これにより$number
containが作成され"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]+))
したがって、実際に一致させる必要があるものに注意してください。
preg_matchを使用した文字列の形式がわかっている場合は、正規表現を使用できます
負の数でも機能する私の古い関数:
function getNumber($str){
return floatval(preg_replace('/^[^\d-]+/','',$str));
}