从字符串中删除非数字字符(不包括句点和逗号)(例如,除了数字、逗号和句点外,删除所有字符)

如果我有以下值:

 $var1 = AR3,373.31


$var2 = 12.322,11T

如何创建一个新变量,并将其设置为删除了逗号和句点以外的任何非数字字符的数据副本?上面的值将返回以下结果:

 $var1_copy = 3,373.31


$var2_copy = 12.322,11
194163 次浏览

您可以使用 Preg _ place交换所有非数字字符 逗号和句号/句号,如下所示:

$testString = '12.322,11T';
echo preg_replace('/[^0-9,.]+/', '', $testString);

该模式也可以表示为 /[^\d,.]+/

我很惊讶这里没有提到 Filter _ var,因为这是一个如此古老的问题..。

PHP 有一个使用 消毒过滤器实现此目的的内置方法。具体来说,在这种情况下使用的是带有 FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND标志的 FILTER_SANITIZE_NUMBER_FLOAT。像这样:

$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"

值得注意的是,因为它是 PHP 内置的,所以它比在 PHP 当前库中使用正则表达式快(虽然字面意思是纳秒)。

如果字母总是在开头或结尾,您可以简单地使用 trim... 不需要正则表达式

$string = trim($string, "a..zA..Z"); // this also take care of lowercase


"AR3,373.31" --> "3,373.31"
"12.322,11T" --> "12.322,11"
"12.322,11"  --> "12.322,11"

真正删除所有非数字字符的最简单方法:

echo preg_replace('/\D/', '', $string);

\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);

输出

12.322,11

了解更多关于 Filter _ var ()消毒过滤器的信息