我面临将名称数据字符串$realName
转换为(正确的)vCard属性的情况。
作为解析器,theiconic name-parser似乎是最适合我的目的(该库当前正在维护,经常下载,并且已经考虑了德国特性)。
源字符串$realName
可以同时包含:人员或公司的名称。因此,它的组件可以(根据我的观点)分配给以下vCard属性:
另一方面,名称解析器提供以下组件(或空字符串):
据此-到目前为止,这是我的映射:
/**
* get an array of name parts vCard property as key
*
* @param string $realname
* @return array
*/
function getNameParts(string $realName)
{
$parser = new Parser();
$nameParts = $parser->parse($realName);
$salutation = $nameParts->getSalutation();
$firstName = $nameParts->getFirstname();
$lastName = $nameParts->getLastname();
$middleName = $nameParts->getMiddlename();
$nickName = $nameParts->getNickname();
$initials = $nameParts->getInitials();
$suffix = $nameParts->getSuffix();
if (!empty($firstName)) {
$additionalName = implode(',', [$middleName, $initials]);
$name = implode(';', [$lastName, $firstName, $additionalName, $salutation, $suffix]);
$fullName = implode(' ', [$salutation, $firstName, $additionalName, $lastName]).', '.$suffix;
} else {
$name = '';
$fullName = $realName;
$company = $realName;
}
return [
'N' => $name,
'FN' => $fullName,
'NICKNAME' => $nickName,
'ORG' => $company,
]
}
我对美国/英国的名称组成规则,它们的正确分配和顺序(例如FN)不太熟悉。我也没有更好的主意,如何确定$realName
是代表公司名称还是个人。
因此,我想知道别人是否有相同的任务,如果可以朝正确的方向前进,可以看看。
许多人
我为自己找到了令人满意的解决方案:https://github.com/theiconic/name-parser/pull/40我希望其他人可以使用它。