str_replace没有做我需要的东西

时间:2017-03-10 22:41:07

标签: php

我有一个表单,使用jQuery在提交之前计算总数。它将总计和货币符号一起发送到表单处理脚本。这产生了一些

  

警告:遇到非数字值

消息,所以我一直在使用str_replace。但是,以下代码仍然会生成错误。除了这一段代码之外,它可以在其他任何地方工作,我找不到解决方案。任何人都可以提供一些建议。

function netprice() {
    $vatrate = 1.2;
    $gross = str_replace('£','',$_POST['unit_Price']);
    $net = round(($gross / $vatrate) , 2);

    if (empty($gross)) {
        echo"-";
    }else{
        echo $net;
    }
}

6 个答案:

答案 0 :(得分:2)

您可以使用filter_var函数仅从字符串中获取数字。

$gross = filter_var($_POST['unit_Price'], FILTER_SANITIZE_NUMBER_INT);

如果你想浮动使用:

$gross = filter_var($_POST['unit_Price'], FILTER_SANITIZE_NUMBER_FLOAT);

答案 1 :(得分:2)

您可以使用str_replace,而不是使用可能会留下空格或其他字符的preg_replace Remove non-numeric characters (except periods and commas) from a string

您的代码如下所示:

function netprice() {

$vatrate = 1.2;

$gross = preg_replace("/[^0-9,.]/", "", $_POST['unit_Price']);
$net = round(($gross / $vatrate) , 2);

    if (empty($gross)) {

        echo"-";

    }else{

        echo $net;
    }
}
除了第一个参数中定义的字符外,

preg_replace将删除所有字符。

答案 2 :(得分:1)

你真的不应该用表格发送货币符号。如果无法避免,可能会有其他字符,例如符号和数字之间的空格。 首先,您可以尝试通过floatval()传递结果值,如下所示:

$gross = floatval(str_replace('£','',$_POST['unit_Price']));

如果它仍然无法正常工作,请使用正则表达式去除除数字,逗号和点之外的每个字符:

$gross = floatval(preg_replace('/[^0-9,.]/', '', $_POST['unit_Price']));

答案 3 :(得分:0)

£更改为£

同时检查您的输出,哪些数据包含$gross

之后的str_replace

答案 4 :(得分:0)

如果您的货币符号位于值之前,则可以使用substr:

<?php
$price = substr('£1.2', 2); //1.2
  

请注意,因为£符号是一个特殊的字符,所以你必须减去2个第一个字符。您可以通过执行var_dump

来检查它

如果你的货币符号在最后,你可以简单地强制de值为float:

$price = (float)'1.2£'; //1.2

答案 5 :(得分:0)

感谢您的帮助。我选择了Pejka的解决方案

$gross = floatval(preg_replace('/[^0-9,.]/', '', $_POST['unit_Price']));

我非常感谢你的帮助。万分谢谢:)