我有一个带有jQuery滑块的表单,允许选择价格范围。
运行滑块的JavaScript还会为每个价格添加£符号的前缀。
我想在提交表单之前删除£符号,因为数据库中的价格值只是数字而没有任何货币符号。
我正在尝试使用str_replace函数,但下面的代码无效?
<div id="slider">
<input type="text" id="price-min" name="price-min" <?php
$price-min = str_replace('£','',$price-min);
?>>
</input>
<input type="text" id="price-max" name="price-max" <?php
$price-max = str_replace('£','',$price-max);
?>>
</input>
</div>
答案 0 :(得分:12)
您只需过滤变量即可。
<?php
$value = "£200";
echo filter_var($value, FILTER_SANITIZE_NUMBER_INT);
我需要支付0英镑到1000英镑的所有价值,并从1000英镑的数字中删除逗号 - 这可能吗?
<?php
$value = "£200";
echo filter_var( str_replace(",", "", $value), FILTER_SANITIZE_NUMBER_INT);
甚至可以作为浮动消毒
<?php
$value = "£1,200";
echo filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT);
有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线
您的变量中包含-
,使其无效。
使用javascript删除£
,使用正则表达式。
var s = "£1,300";
s.replace(/\D/g,'');
如果您接受负十进制数(即: - £20,000.06 / - £20000.06),则使用FILTER_FLAG_ALLOW_FRACTION
标志。 Milan指出了这个问题,因为目前的答案没有处理这个测试用例。
<?php
$value = "-£20,000.06";
echo filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
答案 1 :(得分:1)
实际上,您可以在提交表单后删除井号,因为php是服务器端语言。因此,要么将其从javascript滑块中删除,要么不会将其添加到value属性中,要么使用表单指向的php脚本中的hd。&#39; s答案中的函数。
答案 2 :(得分:1)
要删除所有字符,但应使用数字,点和减号:
$number = preg_replace('/[^0-9-.]+/', '', $string);
一旦应用,此函数将返回一个数值,该值可以正确转换为浮点值。它还将保持负数完整,这非常重要。这里介绍的其他解决方案将它们转换为正数,如果处理货币价值,这是不正确和危险的。