我正在尝试确定一个大写姓氏的方法; 但是,不包括小写前缀.
名称及其转换的示例:
还有一些名称包含需要完全大写的姓氏,因此识别前缀的简单函数是strchr()不够的:
PHP函数mb_strtoupper()不合适,因为它将整个字符串大写.同样strtoupper()是不合适的,并且在重音名称上也会失去重音.
围绕SO有一些答案可以部分回答这个问题,例如:使用PHP进行资本化
然而,常见的不足是假设所有姓氏为姓名的人Mac都跟随资本.
名称在数据库中正确地大写,因此我们可以假设拼写为Macarthur的名称是正确的,或者麦克阿瑟对另一个人是正确的.
遵守规则以在最后一个大写字母后大写所有内容:
preg_replace_callback('/\p{Lu}\p{Ll}+$/u',
function ($m) { return mb_strtoupper($m[0]); },
$name)
Run Code Online (Sandbox Code Playgroud)
\p{Lu}并且\p{Ll}分别是Unicode大写和小写字符,并且mb_strtoupper是unicode感知...对于一个简单的ASCII-only变体,这也会这样做:
preg_replace_callback('/[A-Z][a-z]+$/',
function ($m) { return strtoupper($m[0]); },
$name)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |