在Php中,如何从混合字符串中获取浮点值?

时间:2014-06-21 13:23:03

标签: php string

我有一个字符串:

$str = "CASH55.35inMyPocket";

我想只获得 55.35

我试过了:

$str = floatval("CASH55.35inMyPocket");
if ($str > 0) {
    echo "Greater_Zero";
} else {
    echo "LessZERO!!";
}
// echo "LessZERO!!";

我也尝试过:

$str = (float)"CASH55.35inMyPocket";
if ($str > 0) {
    echo "Greater_Zero";
} else {
    echo "LessZERO!!";
}
// echo "LessZERO!!";

根据文件:

  

字符串很可能会返回0,尽管这取决于   最左边的字符串。

所以,flotval(float)显然只有在字符串类似的情况下才有效: 55.35aAbBcCdDeEfF ...但如果它像aAbBcC55.35dDeEfF

那样无效

有没有办法让浮动 无论文字位置如何?

7 个答案:

答案 0 :(得分:22)

如果您不想使用正则表达式,请使用filter_var

$str = "CASH55.35inMyPocket";
var_dump( (float) filter_var( $str, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) ); // float(55.35) 

答案 1 :(得分:3)

你所拥有的东西不能被渲染到浮点数,因为从PHP的角度看它看起来不像浮点数。但是可以使用正则表达式来获取值。

如果您不确定是否总会有小数。而且无论文本中的位置如何,您都试图获取数字(根据您的问题)。你可以使用:

^.*?([\d]+(?:\.[\d]+)?).*?$

从以下字符串中获取数值:

CASH55.35inMyPocket
CASH55inMyPocket
55.35inMyPocket
55inMyPocket
inMyPocket55.35
inMyPocket55

说明:http://regex101.com/r/tM8eM0
演示:http://rubular.com/r/Gw5HTzsejj
PHP演示:https://eval.in/165521

基本上它会在字符串中查找数字。并且可选地在此之后还检查小数。

答案 2 :(得分:2)

在使用floatval(float)之前,您可以尝试使用一些函数为您提取该值。

类似的东西:

function myFloats($str) {

  if(preg_match("#([0-9\.]+)#", $str, $match)) { // search for number that may contain '.'
    return floatval($match[0]);
  } else {
    return floatval($str); // take some last chances with floatval
  }
}

然后测试:

echo myFloats("CASH55.35inMyPocket");

答案 3 :(得分:1)

使用正则表达式:

preg_match('/([0-9]+\.[0-9]+)/', 'CASH55.35inMyPocket', $matches);
$number = (float) $matches[1]; // 55.35

答案 4 :(得分:1)

我认为preg_replace在这里可能会有所帮助(未经测试):

$float = preg_replace('/[^0-9\.]/', "", "CASH55.35inMyPocket"); // only show the numbers and dots

你可以将preg扩展到只得到[number]。[number],但在这种情况下我认为它会起作用。

答案 5 :(得分:0)

修改@ hek2mgl答案以获取浮点数和整数

preg_match('/([0-9]+\.?[0-9].)/', 'CASH55.35inMyPocket', $matches);
$number = (float) $matches[1]; // 55.35

preg_match('/([0-9]+\.?[0-9].)/', 'CASH55inMyPocket', $matches);
$number = (float) $matches[1]; // 55

preg_match('/([0-9]+\.?[0-9].)/', 'Total.CASH55.35inMyPocket', $matches);  //with a dot before number
$number = (float) $matches[1]; // 55.35

答案 6 :(得分:-1)

function extract_numbers($string)
{
preg_match_all('/([\d]+)/', $string, $match);
return $match[0];
}