正则表达式或类似sprintf的函数来格式化PHP中的字符串

时间:2018-06-20 14:40:19

标签: php string

我有一组要以特定格式显示的字符串:

| Type     | Example    | Regex                   | Output         |
|----------|------------|-------------------------|----------------|
| Ref      | 0909090    | [0-9]{8}                | "09090909"     |
| Identity | 6001002003 | [0-9]{10}               | "600 100 2003" |
| Internal | M12/45678  | [Mm][0-9]{2}/[0-9]{4,8} | "M12 / 45678"  |

PHP中是否有一个函数可以让我传递诸如 正则表达式sprintf字符串,该字符串可以格式化字符串以特定的方式。

不需要是其中任何一个,但 需要能够被指定为字符串。这样一来,我可以将其存储在某种数据对象中,如下所示:

[
   {
      name: "identity",
      regex: "[0-9]{10}",
      format: "%3c %3c %4c" /* or whatever it ends up being */
   },
   // ....
]

该函数应该沿 行工作:

echo formatMyString('6001002003', '%3c %3c %4c') // returns "600 100 2003"

1 个答案:

答案 0 :(得分:2)

在应用preg_replace之前,请对preg_match进行检查。示例:

function formatMyString($string) {
    $patterns = [
        [
            'name' => 'identity',
            'regex' => '^([0-9]{3})([0-9]{3})([0-9]{4})$',
            'format' => '$1 $2 $3'
        ]
    ];

    foreach ($patterns as $pattern) {
        if (preg_match('/'.$pattern['regex'].'/', $string)) {
            return preg_replace('/'.$pattern['regex'].'/', $pattern['format'], $string);
        }
    }

    return false;
}