gpt4 book ai didi

php - 大写姓氏,不包括姓氏的小写前缀部分

转载 作者:行者123 更新时间:2023-12-03 00:08:14 25 4
gpt4 key购买 nike

我正在尝试确定一种将姓氏大写的方法;但是,不包括小写前缀。

名称及其转换示例:

  • 麦克阿瑟 -> 麦克阿瑟
  • 麦克戴维 -> 麦克戴维
  • 勒布朗 -> 勒布朗
  • 麦金太尔 -> 麦金太尔
  • 德威特 -> 德威特

还有一些名称包含需要完全大写的姓氏,因此识别前缀的简单函数(例如 strchr())是不够的:

  • Macmaster -> MACMASTER
  • Macintosh -> MACINTOSH

PHP 函数 mb_strtoupper() 不合适,因为它将整个字符串大写。同样,strtoupper() 也不合适,并且也会丢失带重音的名称的重音。

围绕 SO 的一些答案部分回答了这个问题,例如:Capitalization using PHP然而,常见的缺陷是假设所有带有像 Mac 这样的姓氏的名字后面都带有大写字母。

数据库中的名字大小写正确,因此我们可以假设拼写为 Macarthur 的名字是正确的,或者麦克阿瑟拼写为另一个人的名字是正确的。

最佳答案

遵循最后大写字母之后的所有内容都大写的规则:

preg_replace_callback('/\p{Lu}\p{Ll}+$/u', 
function ($m) { return mb_strtoupper($m[0]); },
$name)

\p{Lu}\p{Ll} 分别是 Unicode 大写和小写字符,而 mb_strtoupper 是 unicode 识别的…对于简单的纯 ASCII 变体,这也可以:

preg_replace_callback('/[A-Z][a-z]+$/', 
function ($m) { return strtoupper($m[0]); },
$name)

关于php - 大写姓氏,不包括姓氏的小写前缀部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com