【问题标题】:How to remove all non-numeric characters from a string?如何从字符串中删除所有非数字字符?
【发布时间】:2011-10-19 16:00:58
【问题描述】:

我正在尝试从我的代码中删除所有非数字字符,但 FILTER_SANITIZE_NUMBER_INT 允许加号和减号。

如何使用可以添加到代码中的 PHP 删除它们?

这是我的代码。

$a = filter_var($a, FILTER_SANITIZE_NUMBER_INT);

【问题讨论】:

    标签: php


    【解决方案1】:

    在这种情况下,您可能需要考虑简单地将结果转换为 int 以删除加号 (+)。

    $a = (int) filter_var($a,FILTER_SANITIZE_NUMBER_INT);
    

    如果您还需要删除减号 (-),有效地获取数字的绝对值,请使用 PHP 的 abs() 函数:

    $a = abs((int) filter_var($a,FILTER_SANITIZE_NUMBER_INT));
    

    【讨论】:

    • 投反对票,因为“123-456”返回“123”,而不是我想要的“123456”。
    • "123-456" 不是 int,因为它包含破折号。你正在寻找str_replace('-', '', "123-456")php.net/manual/en/function.str-replace.php
    • 你读过OP的问题吗?他正在尝试删除所有“非数字字符”,包括删除“加号和减号”。
    • @Sasse 我想我当时对它的解释不同,因为他似乎澄清说他试图去掉前导加号或减号。话虽如此,您的解释和答案似乎确实更准确。我肯定也会使用正则表达式来解决它。
    【解决方案2】:

    我采用了以下解决方案。大写“D”代表“非数字”。

    public static function sanitize_integer($str)
    {
        return (int) preg_replace('/\D/', '', $str);
    }
    

    如果您的输入字符串可能有您希望保留的前导零,请不要将变异字符串转换为整数。

    return preg_replace('/\D/', '', $str);
    

    要减少替换次数(但结果相同),请使用+(一个或多个量词)在每次替换期间删除多个连续的非数字字符。

    return preg_replace('/\D+/', '', $str);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2013-11-12
      • 2013-04-30
      • 1970-01-01
      • 2010-12-04
      • 2010-11-17
      • 2014-04-26
      相关资源
      最近更新 更多