【问题标题】:Use function on any numbers within a string对字符串中的任何数字使用函数
【发布时间】:2012-05-29 15:26:05
【问题描述】:

我正在尝试把它带到这个字符串

**string** = 55 Banana Slush 25 Test 转为Fifty five Banana Slush twenty five test


现在我可以将任何数字转换为单词replaceNumtoWord($number)

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

有什么想法或建议吗?

【问题讨论】:

    标签: php string number-formatting


    【解决方案1】:

    你可以使用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。如果只想匹配 20 个,可以将模式更改为 \b\d+\b

    【讨论】:

    • 删除我的,支持你的,因为它更早,我自己的解决方案没有添加任何新内容。
    • 我很抱歉 Gordon,我更改了函数名称并且从未从您的代码中更新它,似乎没有错误,但我的 replaceNumToWord 函数存在问题,因为它没有返回任何内容。感谢 TheifMaster 和 Gordon
    【解决方案2】:
    preg_replace_callback ( mixed $pattern , callable $callback , mixed
     $subject [, int $limit = -1 [, int &$count ]] )
    

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

    【讨论】:

      【解决方案3】:

      您可以使用preg_replace_callback

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

      如果你的php版本

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-18
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 2015-07-14
        • 1970-01-01
        相关资源
        最近更新 更多