【问题标题】:PHP/Zend: How to remove all chars from a string and keep only numbersPHP/Zend:如何从字符串中删除所有字符并只保留数字
【发布时间】:2011-02-07 19:28:11
【问题描述】:

我只想保留数字并从变量中删除所有字符。

例如:

input: +012-(34).56.(ASD)+:"{}|78*9
output: 0123456789

【问题讨论】:

    标签: php zend-framework pattern-matching


    【解决方案1】:

    这是一般的做法:

    $numbers = preg_replace('/[^0-9]+/', '', '+012-(34).56.(ASD)+:"{}|78*9');
    echo $numbers;
    

    输出:

    0123456789
    

    【讨论】:

    • 我不是正则表达式专家,所以我认为匹配模式中的 + 表示“至少一个字符”,但我不明白为什么 /[^0-9]/ 不够.你有什么例子吗?
    • @Benjamin Delichère:更具体地说,+ 表示match one or more。如果您只使用/[^0-9]/,它将无法匹配您正在处理的整个字符串中可能出现的所有实例。
    • 它可能快一点点。
    【解决方案2】:

    Zend_Filter_Digits

    返回字符串 $value,删除除数字之外的所有字符。

    通过 Zend_Filter 进行静态调用的示例:

    echo Zend_Filter::filterStatic('abc-123-def-456', 'Digits'); // 123456
    

    Digits 实例示例

    $digits = new Zend_Filter_Digits;
    echo $digits->filter('abc-123-def-456'); // 123456;
    

    在内部,过滤器将使用preg_replace 来处理输入字符串。根据是否在启用 UTF8 和 Unicode 的情况下编译 Regex 引擎,将使用以下模式之一:

    • [^0-9] - 禁用 Unicode 时过滤
    • [^[:digit:]] - 使用 mbstring 过滤值
    • [\p{^N}] - 过滤不带 mbstring 的值

    http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Filter/Digits.php

    【讨论】:

    • 调用未定义的方法 Zend_Filter::filterstatic()......我应该包括什么?
    • @Awan filterStatic 带有大写的 S。另外,您使用的是哪个版本的 ZF?注意在 1.9 版本之前,Zend_Filter 允许使用静态 get() 方法。与 1.9 版一样,此方法已重命名为 filterStatic() 以更具描述性。旧的 get() 方法被标记为已弃用。 - framework.zend.com/manual/en/migration.19.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2011-10-19
    • 2010-11-04
    相关资源
    最近更新 更多