如果我有以下值:
$var1 = AR3,373.31
$var2 = 12.322,11T
Run Code Online (Sandbox Code Playgroud)
如何创建新变量并将其设置为删除了任何非数字字符的数据副本,但逗号和句点除外?上面的值将返回以下结果:
$var1_copy = 3,373.31
$var2_copy = 12.322,11
Run Code Online (Sandbox Code Playgroud)
Joh*_*ker 326
您可以使用preg_replace交换所有非数字字符以及逗号和句点/句点,如下所示:
<?php
$testString = "12.322,11T";
echo preg_replace("/[^0-9,.]/", "", $testString);
?>
Run Code Online (Sandbox Code Playgroud)
Bry*_*Way 63
我很惊讶在这里没有提到filter_var这是一个如此古老的问题......
PHP有一个使用清理过滤器的内置方法.具体来说,在这种情况下使用的是FILTER_SANITIZE_NUMBER_FLOAT带有FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND标志的.像这样:
$numeric_filtered = filter_var("AR3,373.31", FILTER_SANITIZE_NUMBER_FLOAT,
FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
echo $numeric_filtered; // Will print "3,373.31"
Run Code Online (Sandbox Code Playgroud)
值得注意的是,因为它内置于PHP,它比使用PHP当前库的正则表达式稍微快一些(尽管字面上是纳秒).
mop*_*922 26
真正删除所有非数字字符的最简单方法:
echo preg_replace('/\D/', '', $string);
Run Code Online (Sandbox Code Playgroud)
\D 表示"任何不是十进制数字的字符"
http://php.net/manual/en/regexp.reference.escape.php
您可以使用filter_var删除除数字、点和逗号之外的所有非法字符。
FILTER_SANITIZE_NUMBER_FLOAT过滤器用于去除从字符串中的所有非数字字符。FILTER_FLAG_ALLOW_FRACTION 允许分数分隔符 " . "FILTER_FLAG_ALLOW_THOUSAND从字符串中获取逗号的目的。代码
$var1 = '12.322,11T';
echo filter_var($var1, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND);
Run Code Online (Sandbox Code Playgroud)
输出
12.322,11
Run Code Online (Sandbox Code Playgroud)
阅读更多关于filter_var()和Sanitize 过滤器的信息