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

Uni*_*asp 9 php string

我有一个字符串:

$str = "CASH55.35inMyPocket";
Run Code Online (Sandbox Code Playgroud)

我想只得到55.35.

我试过了:

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

我也尝试过:

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

根据文件:

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

所以,flotval(float)如果字符串是一样的东西显然只工作: 55.35aAbBcCdDeEfF...但如果是喜欢将不起作用:aAbBcC55.35dDeEfF

有没有办法让浮动无论文本的位置?

Dan*_*jel 24

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

$str = "CASH55.35inMyPocket";
var_dump( (float) filter_var( $str, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION ) ); // float(55.35) 
Run Code Online (Sandbox Code Playgroud)

  • 感谢`(float)`...没有它,返回的值是一个字符串 (3认同)

Pee*_*Haa 5

你所拥有的不能转换为浮点数,因为从 PHP 的角度来看它看起来不像浮点数。不过,可以使用正则表达式获取该值。

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

^.*?([\d]+(?:\.[\d]+)?).*?$
Run Code Online (Sandbox Code Playgroud)

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

CASH55.35inMyPocket
CASH55inMyPocket
55.35inMyPocket
55inMyPocket
inMyPocket55.35
inMyPocket55
Run Code Online (Sandbox Code Playgroud)

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

基本上它在字符串中查找数字。之后它还可以选择检查小数。