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

use*_*783 143 php string

如果我有以下值:

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

  • 另见php函数money_function()(http://php.net/manual/en/function.money-format.php) (6认同)
  • [^ 0-9]将匹配任何非数字字符,因此不必添加逗号和句号.这就足够了:echo preg_replace('/ [^ 0-9] /','',$ testString); (5认同)
  • @billrichards我不认为这是正确的.记住他想保留逗号和句号以及数字字符,而不是删除它们. (5认同)
  • @billrichards 正如 OP 所说(强调我的),“避免使用字母或字符***,逗号和点***除外”。 (2认同)

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当前库的正则表达式稍微快一些(尽管字面上是纳秒).

  • IMO这是最好的答案. (2认同)

mop*_*922 26

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

echo preg_replace('/\D/', '', $string);
Run Code Online (Sandbox Code Playgroud)

\D 表示"任何不是十进制数字的字符"

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

  • 请考虑删除这个不正确的答案。不正确的答案会影响正确的答案,并可能使研究人员感到困惑,并浪费研究人员的时间来阅读不适当的见解。下面是另一个未被指出的内容示例:/sf/answers/2625052951/ 当内容被证明不正确时,Stack Overflow 是一个不太有效的研究工具。所有这些赞成票都是不正当的。 (3认同)
  • 这不适用于OP的要求。这是另一个问题的正确答案。 (2认同)

Ade*_*eel 5

您可以使用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 过滤器的信息