我有一个表单,使用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;
}
}
答案 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']));
我非常感谢你的帮助。万分谢谢:)