【发布时间】:2011-02-07 19:28:11
【问题描述】:
我只想保留数字并从变量中删除所有字符。
例如:
input: +012-(34).56.(ASD)+:"{}|78*9
output: 0123456789
【问题讨论】:
标签: php zend-framework pattern-matching
我只想保留数字并从变量中删除所有字符。
例如:
input: +012-(34).56.(ASD)+:"{}|78*9
output: 0123456789
【问题讨论】:
标签: php zend-framework pattern-matching
这是一般的做法:
$numbers = preg_replace('/[^0-9]+/', '', '+012-(34).56.(ASD)+:"{}|78*9');
echo $numbers;
输出:
0123456789
【讨论】:
+ 表示match one or more。如果您只使用/[^0-9]/,它将无法匹配您正在处理的整个字符串中可能出现的所有实例。
返回字符串 $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
【讨论】:
filterStatic 带有大写的 S。另外,您使用的是哪个版本的 ZF?注意在 1.9 版本之前,Zend_Filter 允许使用静态 get() 方法。与 1.9 版一样,此方法已重命名为 filterStatic() 以更具描述性。旧的 get() 方法被标记为已弃用。 - framework.zend.com/manual/en/migration.19.html