【发布时间】:2009-11-02 13:57:46
【问题描述】:
我正在寻找最可靠的方法来返回给定全名的人的名字和姓氏,到目前为止,我能想到的最好的方法是以下正则表达式:
$name = preg_replace('~\b(\p{L}+)\b.+\b(\p{L}+)\b~i', '$1 $2', $name);
预期的输出应该是这样的:
William -> William // Regex Fails
William Henry -> William Henry
William Henry Gates -> William Gates
我还希望它支持口音,例如“João”。
编辑:我知道 一些 名称不会被正确识别,但这对我来说不是问题,因为这将用于最后一个本地站点word 是姓氏(虽然可能不是整个姓氏)但这不是问题,因为我想要的只是一种快速地说“亲爱的 FIRST_NAME LAST_NAME”的方式......所以所有这些讨论,虽然完全有效,对我没用。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
你会如何处理像“Hesselink 的 Jan Vennegoor”这样的名字或姓氏在前的国家的名字?
-
如果有人有双桶名称,即 John Wright Smith,您将开始遇到问题。正如您假设 String { } String 之间的任何内容都是中间名。
-
@Rich 和 @James - 是的,但他非常清楚地定义了姓氏的含义。
-
@Domonic,定义可能很清楚,但不适用于一大类名称。 “黑塞林克的 Vennegoor”是姓:en.wikipedia.org/wiki/Jan_Vennegoor_of_Hesselink
-
Dominic,仅仅因为他以一种方式定义了这一点并不意味着他一定在做正确的事情,强调他正在尝试做的事情中可能存在的缺陷是绝对正确的。