我只想显示用户名字的首字母和姓氏的首字母。 (测试用户= TU)
即使用户输入前缀或中间名,如何获得此结果? (先生测试中间名用户= TU)。
这是我到目前为止的代码(但根据用户输入,将显示2个以上的字母):
public function initials() {
$words = explode(" ", $this->name );
$initials = null;
foreach ($words as $w) {
$initials .= $w[0];
}
return strtoupper($initials);
}
答案 0 :(得分:4)
变化太多,但这应该捕获字符串中的名字和姓氏,这些字符串可能带有也可能没有以句点结尾的前缀或后缀:
public function initials() {
preg_match('/(?:\w+\. )?(\w+).*?(\w+)(?: \w+\.)?$/', $this->name, $result);
return strtoupper($result[1][0].$result[2][0]);
}
$result[1]
和$result[2]
是第一个和最后一个捕获组,每个捕获组的[0]
索引是字符串的第一个字符。
查看Example
这做得很好,但是其中带有空格的名称将仅返回第二部分,例如De Jesus
将仅返回Jesus
。您可以为de, von, van
等姓氏添加已知的修饰语,但是很幸运地将它们全部捕获,尤其是van de, van der, van den
更长的时候。
要将其扩展为非英语前缀和后缀,您可能需要定义它们并去除它们,因为某些前缀可能不会在句号中结束。
$delete = ['array', 'of prefixes', 'and suffixes'];
$name = str_replace($delete, '', $this->name);
//or just beginning ^ and end $
$prefix = ['array', 'of prefixes'];
$suffix = ['array', 'of suffixes'];
$name = preg_replace("/^$prefix|$suffix$/", '', $this->name);
答案 1 :(得分:2)