我有一组要以特定格式显示的字符串:
| 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"
答案 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;
}