PHP/Zend:如何从字符串中删除所有字符并仅保留数字

Awa*_*wan 4 php zend-framework pattern-matching

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

例如:

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

Sar*_*raz 11

这是如何做到这一点:

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

输出:

0123456789
Run Code Online (Sandbox Code Playgroud)


Gor*_*don 6

使用Zend_Filter_Digits

返回字符串$ value,删除除数字字符以外的所有字符.

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

echo Zend_Filter::filterStatic('abc-123-def-456', 'Digits'); // 123456
Run Code Online (Sandbox Code Playgroud)

Digits实例示例

$digits = new Zend_Filter_Digits;
echo $digits->filter('abc-123-def-456'); // 123456;
Run Code Online (Sandbox Code Playgroud)

在内部,过滤器将用于preg_replace处理输入字符串.根据是否使用UTF8和Unicode编译正则表达式引擎,将使用以下模式之一:

  • [^0-9] - 如果禁用Unicode,则过滤
  • [^[:digit:]] - 使用mbstring过滤值
  • [\p{^N}] - 过滤没有mbstring的值

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

  • 使用大写字母S的@Awan`过滤器静态`也使用哪个版本的ZF?请注意,在1.9发行版之前,Zend_Filter允许使用静态get()方法.与版本1.9一样,此方法已重命名为filterStatic()以使其更具描述性.旧的get()方法被标记为已弃用.* - http://framework.zend.com/manual/en/migration.19.html (2认同)