从string中删除非数字字符(除了句点和逗号)

如果我有以下值:

$var1 = AR3,373.31 $var2 = 12.322,11T 

我怎样才能创build一个新的variables,并将其设置为删除了任何非数字字符的数据副本,逗号和句点除外? 上面的值将返回以下结果:

  $var1_copy = 3,373.31 $var2_copy = 12.322,11 

您可以使用preg_replacereplace所有非数字字符和逗号和句点/句号,如下所示:

 <?php $testString = "12.322,11T"; echo preg_replace("/[^0-9,.]/", "", $testString); ?> 

我很惊讶没有提到filter_var在这里,这是一个如此古老的问题…

PHP有一个使用清理filter的内置方法。 具体而言,在这种情况下使用FILTER_FLAG_ALLOW_FRACTION | FILTER_FLAG_ALLOW_THOUSAND 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" 

值得注意的是,因为它内置于PHP,所以比使用PHP的当前库的正则expression式(尽pipe字面上是纳秒)要快一些。

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

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

\D代表“任何不是十进制数的字符”

http://php.net/manual/en/regexp.reference.escape.php

如果请求是删除所有(而不是一个)非数字字符,也许以前可以这样写在一个非常简单的方式(但是你可以写一个函数来传递string,并使其返回所需的值没有字符..反正..):

 <?php $String1 = 'AR3,373.31'; $String2 = '12.322,11T'; echo preg_replace('/[^0-9,.]+/i', '', $String1); echo preg_replace('/[^0-9,.]+/i', '', $String2); ?> 

如果字母总是在开始或结束,你可以简单地使用修剪…不需要正则expression式

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

与middaparka相同的答案,但删除,.

 $unformatted_phone = "phone 122-3222223.ext 442"; echo preg_replace("/[^0-9]/", "", $unformatted_phone);