我正在尝试修复一些手动输入的地址。我需要ucwords
在整个地址上提出申请,但我想保留所有罗马数字为大写字母,并保留门牌号后的字母。
VIA PIPPO III 74A
应该变成:
Via Pippo III 74A
我该如何实现?
通过以下命令选择性地将字符串的大写部分mb_eregi_replace()
:
$str = mb_eregi_replace('\b([0-9]{1,4}[a-z]{1,2})\b', "strtoupper('\\1')", $str, 'e');
完整示例,如何固定手动输入的地址,将单词的第一个字母大写,并保留大写罗马数字以及门牌号后的字母A,B,C:
function ucAddress($str) {
// first lowercase all and use the default ucwords
$str = ucwords(strtolower($str));
// let's fix the default ucwords...
// uppercase letters after house number (was lowercased by the strtolower above)
$str = mb_eregi_replace('\b([0-9]{1,4}[a-z]{1,2})\b', "strtoupper('\\1')", $str, 'e');
// the same for roman numerals
$str = mb_eregi_replace('\bM{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b', "strtoupper('\\0')", $str, 'e');
return $str;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句