adci / full-name-parser
解析人名
Requires
- php: >=5.6
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: >=4.8.28 <5
README
描述
FullNameParser设计用于解析大量格式不一致的全名,例如来自数据库,即使遇到一些无法解析的垃圾条目也能继续处理而不会出错。
FullNameParser::parse()
- 接受一个包含人名的字符串,格式不限,
- 分析和尝试检测该姓名的格式,
- (如果可能)将姓名解析为其组成部分,
- (默认情况下)返回一个包含姓名所有单独部分的对象
- title (字符串):头衔(例如 "Ms." 或 "Dr.")
- first (字符串):名字或首字母
- middle (字符串):中间名(或首字母)
- last (字符串):姓氏或首字母
- nick (字符串):昵称
- suffix (字符串):后缀(例如 "Jr."、"II" 或 "Esq.")
- error (字符串数组):任何解析错误消息
可选地,FullNameParser还可以
- 返回姓名的指定部分作为字符串(或错误数组)
- 始终修复或忽略返回部分的字母大小写(默认是仅在原始输入全为大写或全为小写时修复大小写)
- 在错误时停止(默认是在输出中返回警告消息,但永远不会抛出PHP错误,无论输入有多混乱)
现在FullNameParser不能
- 检测更多姓名前缀、后缀和头衔的变化(默认检测29个前缀、19个后缀、16个头衔和8个连词,但在将来可以设置为检测97个前缀、23个后缀和204个头衔)
如果这不是你想要的,对于你的应用程序来说过于冗余,或者语言不正确,请检查此文件末尾的“致谢”部分,以获取链接到其他可能更适合你需求的解析器。
使用
基本用法
<?php use ADCI\FullNameParser\Parser; // some code ... $parser = new Parser(); $name = 'Mr. David Davis'; $nameObject = $parser->parse($name); $this->assertEquals('Mr.', $nameObject->getAcademicTitle()); $this->assertEquals('David', $nameObject->getFirstName()); $this->assertEquals('Davis', $nameObject->getLastName());
高级选项
suffixes(字符串数组,可选):覆盖要搜索的后缀列表。这些后缀可以以点在源名称字符串中结束。虽然你不必在这些后缀中包含点,但在解析时将自动处理点。
numeral_suffixes(字符串数组,可选):覆盖要搜索的数字后缀列表。不要包含尾随的点。
prefixes(字符串数组,可选):覆盖要搜索的前缀列表。
academic_titles(字符串数组,可选):覆盖要搜索的学术头衔列表。
part(字符串,可选):要返回的单个部分名称。
- 'all' (默认) = 返回包含所有姓名部分的对象。
- 'title' = 仅返回头衔(或空字符串)。
- 'first' = 仅返回名字(或空字符串)。
- 'middle' = 仅返回中间名(或空字符串)。
- 'last' = 仅返回姓氏(或空字符串)。
- 'nick' = 仅返回昵称(或空字符串)。
- 'suffix' = 仅返回后缀(或空字符串)。
- 'error' = 仅返回解析错误消息数组(或空数组)。
fix_case (布尔值|整数,可选):修复输出姓名的大小写。
- 0或false(默认)= 从不修复大小写(保留和输出与输入姓名相同的大小写)。
- 1或true = 总是修复输出的大小写,即使输入是混合大小写。
throws (布尔值|整数,可选):使解析错误抛出PHP错误。
- 0 或 false = 返回解析错误警告,但继续。
- 1 或 true(默认)= 如果发现解析错误,则抛出 PHP 错误。
mandatory_first_name(bool|integer, optional): 如果找不到名字,则抛出错误。
- 0 或 false = 不抛出错误。
- 1 或 true(默认)= 抛出错误。
mandatory_last_name(bool|integer, optional): 如果找不到姓氏,则抛出错误。
- 0 或 false = 不抛出错误。
- 1 或 true(默认)= 抛出错误。
mandatory_middle_name(bool|integer, optional): 如果有太多的中间名,则抛出警告。
- 0 或 false = 不抛出警告。
- 1 或 true(默认)= 抛出警告。
高级使用
<?php use ADCI\FullNameParser\Parser; // Some code... // Example with advanced options. $parser = new Parser(['part' => 'all', 'fix_case' => TRUE, 'throws' => FALSE]); $name = 'DE LORENZO Y GUTIEREZ, Mr. JÜAN MARTINEZ (MARTIN) Jr.'; $nameObject = $parser->parse($name); $this->assertEquals('Mr.', $nameObject->getAcademicTitle()); $this->assertEquals('Jüan', $nameObject->getFirstName()); $this->assertEquals('Martinez', $nameObject->getMiddleName()); $this->assertEquals('de Lorenzo y Gutierez', $nameObject->getLastName()); $this->assertEquals('Martin', $nameObject->getNicknames()); $this->assertEquals('Jr.', $nameObject->getSuffix()); $this->assertEquals([], $nameObject->getErrors()); // Some else code... // And example with overriding suffixes and titles lists by short versions of lists. $options = [ 'suffixes' => ['esq', 'jr', 'sr'], 'academic_titles' => ['ms', 'mrs', 'mr'], ]; $parser = new Parser($options); $nameObject = $parser->parse($name);
报告错误
如果您发现此函数无法正确解析某个名字或任何其他错误,请在此处报告:https://github.com/adci/full-name-parser/issues
致谢和先驱
此解析器基于并与 davidgorges/human-name-parser 兼容。
它还实现了来自 dschnelldavis/parse-full-name 的所有测试和大部分附加功能。