1

我试图把它带到这个字符串

**string** = 55 Banana Slush 25 Test进入Fifty five Banana Slush twenty five test


现在我有了将任何数字转换为单词的功能replaceNumtoWord($number)

但是我需要获取字符串,找到每个数字,然后在字符串中的每个数字上使用该函数,而不是从中提取数字。

有什么想法或建议吗?

4

3 回答 3

4

您可以使用preg_replace_callback()

$str = preg_replace_callback('/\d+/', function($match) {
    return replaceNumToWord($match[0]);
}, $str);

如果您必须使用不支持匿名函数的旧 PHP 版本:

function _num2word_cb($match) {
    return replaceNumToWord($match[0]);        
}
$str = preg_replace_callback('/\d+/', '_num2word_cb', $str);

旁注:该模式\d+将匹配任何数字序列,无论它们出现在哪里,例如它将匹配“my10,20,30foo”中的 10、20 和 30。\b\d+\b如果您只想匹配 20 ,则可以将模式更改为。

于 2012-05-23T05:36:46.883 回答
1

您可以使用preg_replace_callback

function transNumber($str) {
  return preg_replace_callback('/\d+/', function($matches){
            return replaceNumtoWord($matches[0]);
         }, $str);
}

如果您的 php 版本 < 5.3,那么您需要定义传递给 preg_replace_callback 的函数。

于 2012-05-23T05:40:08.873 回答
1
preg_replace_callback ( mixed $pattern , callable $callback , mixed
 $subject [, int $limit = -1 [, int &$count ]] )

此函数的行为几乎与 preg_replace() 相同,除了应该指定回调而不是替换参数这一事实。

于 2012-05-23T05:44:55.597 回答