如何将混合的PHP字符串转换为仅数字

如何将混合的PHP字符串转换为仅数字,php,Php,我有这样一个字符串: $string = 'e.g. 25.32'; 我只想取出号码(25.32) 数字周围的文本可能是任何非数字。如果知道字符串的格式,可以使用正则表达式 <?php $str = "e.g. 25"; $val = (int)$str; ?> 作为一项功能:(更新) 用法: 25.32 <?php $val = getInt("e.g. 25.32"); ?> 我的旧函数也适用于负数: function g

我有这样一个字符串:

$string = 'e.g. 25.32';
我只想取出号码(25.32)


数字周围的文本可能是任何非数字。

如果知道字符串的格式,可以使用正则表达式

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

作为一项功能:(更新)


用法:

25.32
<?php
      $val = getInt("e.g. 25.32");
?>

我的旧函数也适用于负数:

function getNumber($str){
    return floatval(preg_replace('/^[^\d-]+/','',$str));
}

如果数字很简单:

([0-9]+(?:\.[0-9]+)?)
然后,您希望在字符串末尾匹配此项:

$string = 'e.g. 25.32';
$number = preg_replace('~^.*?([0-9]+(?:\.[0-9]+)?)$~', '$1', $string);
这将使
$number
包含
“25.32”
,如果需要浮点值,请将其转换为浮点:

$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]+))

因此,请注意实际需要匹配的内容。

如果字符串包含多个数字,该怎么办?例如
,例如10.5和12.7
?我很确定以前有人问过这个问题。请使用右侧的搜索和相关列。该列不返回浮点数,仅返回整数。
$string = 'e.g. 25.32';
$number = NULL;
$hasNumber = preg_match('~([0-9]+(?:\.[0-9]+)?)$~', $string, $matches);
if ($hasNumber)
{
    list(, $number) = $matches;
}
([+-]?INF|[+-]?(([0-9]+|([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*))|([0-9]+|(([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*)))[eE][+-]?[0-9]+))