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

4

我希望保留变量中的数字并删除所有字符。

例如:

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

11

这是一般的做法:

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

输出:

0123456789

我不是正则表达式专家,所以我假设匹配模式中的+表示“至少一个字符”,但我不明白为什么/ [^0-9] /不够。你有任何例子吗? - Benjamin Delichere
更具体地说,+ 表示 匹配一个或多个。如果你只使用 /[^0-9]/,它不会匹配到你正在处理的字符串中可能出现的所有实例。 - Sarfraz
它可能会快一点点。 - pars

6

使用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来处理输入字符串。根据Regex引擎是否启用了UTF8和Unicode,将使用以下其中一种模式:

  • [^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
2
@Awan filterStatic 首字母需大写。另外,您使用的是哪个版本的ZF?请注意,在1.9版本之前,Zend_Filter允许使用静态get()方法。随着1.9版本的发布,该方法已更名为filterStatic()以提高描述性。旧的get()方法已被标记为弃用。- http://framework.zend.com/manual/en/migration.19.html - Gordon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接