从字符串中删除非数字字符(句点和逗号除外)

时间:2011-02-09 19:05:00

标签: php string

如果我有以下值:

 $var1 = AR3,373.31

 $var2 = 12.322,11T

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

 $var1_copy = 3,373.31

 $var2_copy = 12.322,11

7 个答案:

答案 0 :(得分:311)

您可以使用preg_replace换出所有非数字字符以及逗号和句号/句号,如下所示:

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

答案 1 :(得分:63)

我很惊讶那里没有提及filter_var这是一个如此古老的问题......

PHP有一个使用sanitization filters执行此操作的内置方法。具体来说,在这种情况下使用的是具有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"

值得注意的是,因为它内置于PHP,所以稍微比使用PHP的当前库使用正则表达式更快字面上以纳秒计。)

答案 2 :(得分:25)

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

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

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

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

答案 3 :(得分:3)

您可以使用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()Sanitize filters

答案 4 :(得分:2)

如果请求是要删除所有(并且不仅仅是一个)非数字字符,也许前一个可以用非常简单的方式编写(但是你可以编写一个函数来传递字符串并让它返回所需的没有字符的价值..无论如何..):

<?php
$String1 = 'AR3,373.31';
$String2 = '12.322,11T';

echo preg_replace('/[^0-9,.]+/i', '', $String1);
echo preg_replace('/[^0-9,.]+/i', '', $String2);
?>

答案 5 :(得分:1)

如果字母总是在开头或结尾,你只需使用修剪......不需要正则表达式

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

答案 6 :(得分:-1)

与middaparka相同,但删除,.

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