curiolabs/name-parser

PHP 库,用于解析包含完整名称的字符串,将其分解为其各个部分

v1.3.2 2018-11-26 17:52 UTC

README

Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version Total Downloads License

目的

这是一个通用的、语言无关的名称解析器。

它的目的是将包含问候语、首字母缩写、后缀等可能的单个字符串拆分为有意义的部分,如名、姓、首字母等。

它主要针对英语姓名,但只要它们使用拉丁字母拼写,与非英语姓名也能很好地工作。

例如 Mr Anthony R Von Fange III 被解析为

  • 问候语: Mr.
  • 名: Anthony
  • 首字母: R
  • 姓: von Fange
  • 后缀: III

功能

支持的格式

此解析器可以处理带逗号和不带逗号的名格式

... [firstname] ... [lastname] ...
... [lastname] ..., ... [firstname] ...
... [lastname] ..., ... [firstname] ..., [suffix]

支持的各个部分

  • 问候语(例如 Mr、Mrs、Dr 等)
  • 中间名
  • 首字母(单个字母,可能后跟一个点)
  • 昵称(括号、方括号等内的部分)
  • 姓(也支持前缀如 von、de 等)
  • 后缀(Jr、Senior、3rd、PhD、等)

其他功能

  • 支持多语言问候语、后缀和姓前缀
  • 可自定义昵称分隔符
  • 可自定义所有输出字符串的规范化(原始值仍然可访问)
  • 可自定义空白字符

示例

解析器单元测试 中可以找到超过 80 种不同成功解析的名格式。

设置

composer require CurioLabs/name-parser

用法

基本用法

<?php

$parser = new CurioLabs\NameParser\Parser();

$name = $parser->parse($input);

echo $name->getSalutation();
echo $name->getFirstname();
echo $name->getLastname();
echo $name->getMiddlename();
echo $name->getNickname();
echo $name->getInitials();
echo $name->getSuffix();

print_r($name->getAll()); // all parts as an associative array

echo $name; // re-prints the full normalised name

对于缺少的部分,将返回一个空字符串。

特殊部分检索功能

显式姓部分

您可以使用以下方法分别检索姓前缀和纯姓

echo $name->getLastnamePrefix();
echo $name->getLastname(true); // true enables strict mode for pure lastnames, only

带有规范化包装的昵称

默认情况下,getNickname() 返回昵称的纯字符串。但是,您可以传递 true 以应用与 echo $name 相同的规范化括号包装。

echo $name->getNickname(); // The Giant
echo $name->getNickname(true); // (The Giant)

设置语言

$parser = new CurioLabs\NameParser\Parser([
    new CurioLabs\NameParser\Language\English(), //default
    new CurioLabs\NameParser\Language\German(),
])

设置昵称分隔符

$parser = new CurioLabs\NameParser\Parser();
$parser->setNicknameDelimiters(['(' => ')']);

设置空白字符

$parser = new CurioLabs\NameParser\Parser();
$parser->setWhitespace("\t _.");

限制问候语的位置

$parser = new CurioLabs\NameParser\Parser();
$parser->setMaxSalutationIndex(2);

这将要求问候语出现在给定输入字符串的前两个单词中。默认为输入字符串单词数量的一半,这意味着问候语可能出现在名部分的前半部分。

许可证

THE ICONIC Name Parser PHP 库在 MIT 许可证下发布。