我有一个带有jQuery滑块的表单,可以选择价格范围。
运行滑块的JavaScript还会为每个价格添加一个£
符号的前缀。
我试图在提交表单之前删除£
符号,因为数据库中的价格值只有numeric
,没有任何货币符号。
我正在尝试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>
您只需过滤变量即可。
<?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);
实时预览
有效的变量名以字母或下划线开头,后面跟着任意数量的字母、数字或下划线
您的变量中包含-
,使其无效。
编辑2
使用javascript删除£
,请使用正则表达式。
var s = "£1,300";
s.replace(/D/g,'');
实时预览
编辑3
如果您接受负十进制数字(即:-2000000.06英镑/-20000.06英镑),则使用FILTER_FLAG_ALLOW_FRACTION
标志。米兰指出了这个问题,因为目前的答案无法处理这个测试案例。
<?php
$value = "-£20,000.06";
echo filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
实时预览
实际上,您可以在提交表单后删除磅符号,因为php是一种服务器端语言。因此,要么从javascript滑块中删除它,这样它就不会添加到value属性中,要么使用hd中的函数s在php脚本中的答案,表单指向。
要删除除数字、点和减号之外的所有字符,请使用:
$number = preg_replace('/[^0-9-.]+/', '', $string);
一旦应用,此函数将返回一个数值,该数值可以正确地转换为浮点值。它还将保持负数的完整性,这是非常重要的。这里提出的其他解决方案是将它们转换为正数,如果处理货币价值,这是不正确和危险的。
HTML中的货币符号是HTML实体(我的意思是,前端值),因此直接使用货币符号来查找和替换它们是不可能的,因此在PHP中使用如下只获取数字。
$price = '$109.99';
$digitOnly = preg_replace('/&.*?;/', '', $price);