PHPackages                             iliaal/nameparser - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. iliaal/nameparser

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

iliaal/nameparser
=================

Parse a full-name string into its parts. Casing- and credential-aware fork of theiconic/name-parser, tuned for professional/clinician names.

v1.0.0(2d ago)00MITPHPPHP ^8.3CI passing

Since Jun 7Pushed 2d agoCompare

[ Source](https://github.com/iliaal/nameparser)[ Packagist](https://packagist.org/packages/iliaal/nameparser)[ RSS](/packages/iliaal-nameparser/feed)WikiDiscussions master Synced 2d ago

READMEChangelog (1)Dependencies (4)Versions (2)Used By (0)

iliaal/nameparser
=================

[](#iliaalnameparser)

[![CI](https://github.com/iliaal/nameparser/actions/workflows/ci.yml/badge.svg)](https://github.com/iliaal/nameparser/actions/workflows/ci.yml)[![Latest Version](https://camo.githubusercontent.com/5931220536fcdaf4a0c44a08aa7ca1f26fd469bb70140829050bb4a6adbb37cc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f696c6961616c2f6e616d65706172736572)](https://packagist.org/packages/iliaal/nameparser)[![PHP Version](https://camo.githubusercontent.com/da96775dcb0283101f8340ba50eee97b73740755dc3ece5e08d6a236da9af03a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f696c6961616c2f6e616d65706172736572)](https://packagist.org/packages/iliaal/nameparser)[![License: MIT](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667)](https://opensource.org/licenses/MIT)[![Follow @iliaa](https://camo.githubusercontent.com/a54521c97521f05fbadec4bd9bcba96ff1eeaffe756a6d7338b47a628cdeb39b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f466f6c6c6f772d40696c6961612d3030303030303f7374796c653d666c6174266c6f676f3d78266c6f676f436f6c6f723d7768697465)](https://x.com/intent/follow?screen_name=iliaa)

Parse a string containing a full name into its parts (salutation, first name, middle names, initials, last name with prefixes, suffix, nickname).

> **Fork lineage.** This is a fork of [theiconic/name-parser](https://github.com/theiconic/name-parser) (dormant since ~2020), built on top of the modernization done by [codebyzach/name-parser](https://github.com/CodeByZach/name-parser). It adds **casing- and credential-aware parsing** and a **confidence/ambiguity signal**, and targets PHP 8.3+.

Why this fork
-------------

[](#why-this-fork)

The upstream parser keys every token through `strtolower()` before matching it against its salutation/suffix dictionaries, so it cannot tell an all-caps credential from a same-spelled name. Two failure modes follow, both common in professional and clinician name lists:

1. A trailing credential without a comma swallows the surname: `"Jane Doe DDS"` parsed to last name **"Dds"** (the real surname lost).
2. A short credential token that is also a real name is mis-stripped: the Vietnamese surname **"Do"** and given name **"Vi"** were consumed as the credentials DO / VI.

This fork fixes both and adds an advisory confidence pass for the genuinely ambiguous cases.

### What changed

[](#what-changed)

- **Casing as a signal.** An ambiguous token (`Do`, `Vi`, `Ma`, roman numerals, two-letter credentials) is treated as a credential only when written ALL-CAPS (`DO`, `VI`); Title- or lower-case keeps it as a name part. People write credentials in caps and names in title case, so the original casing carries the signal that lowercasing discarded.
- **Terminal-token guard.** A lone name-colliding token in a comma given-name segment is kept as a name rather than emptied into a credential, unless its casing reads as a credential.
- **Confidence assessor.** When a token matches a credential but the casing is uninformative (uniform-case input, or a lowercase token), `Confidence::assess()`flags the input so you can route it to manual review instead of trusting the split.
- **Expanded English dictionary** (inherited from the CodeByZach fork): DDS, DO, DVM, PsyD, LCSW, MSW, MBA, EMBA, Esq, roman numerals VI to X, `Hon.`, and more.
- **Nursing and allied-health credentials.** RN, NP, PharmD, APRN, PA-C, OTR/L, and 30+ more, mined by frequency from the NPI registry, so a trailing credential no longer leaks into the first name.
- **Unclosed nickname delimiter.** An opening `(` or quote with no matching close no longer swallows the surname (`"John (Bob Smith"` keeps `Smith`).

Requirements
------------

[](#requirements)

- PHP 8.3+ (tested through 8.5)
- `ext-mbstring`

Installation
------------

[](#installation)

```
composer require iliaal/nameparser
```

Usage
-----

[](#usage)

```
use Iliaal\NameParser\Parser;

$parser = new Parser();
$name = $parser->parse('Dr. Jane A. Doe DDS');

$name->getSalutation();   // "Dr."
$name->getFirstname();    // "Jane"
$name->getInitials();     // "A."
$name->getLastname();     // "Doe"
$name->getSuffix();       // "DDS"
$name->getFullName();     // "Jane A. Doe"
```

The full getter surface (`getMiddlename()`, `getNickname()`, `getLastnamePrefix()`, `getGivenName()`, `getAll()`) is unchanged from upstream.

### Confidence / ambiguity

[](#confidence--ambiguity)

For batch imports where a wrong split is a data-integrity problem, check whether the input was decidable from its casing:

```
use Iliaal\NameParser\Confidence;

$result = Confidence::assess('NGUYEN, VI');
// ['ambiguous' => true, 'notes' => ["'VI' could be a name or a credential; input casing is uniform"]]

if ($result['ambiguous']) {
    // queue the row for manual review instead of trusting the parse
}
```

A mixed-case input like `"Nguyen, Vi"` stays unflagged; the title-case `Vi`resolves to the given name.

Development
-----------

[](#development)

```
composer install
composer test     # phpunit
composer analyse  # phpstan (level 9)
composer lint     # php-cs-fixer (dry run)
```

Credits
-------

[](#credits)

Original library by [The Iconic](https://github.com/theiconic). Modernization to PHP 8.3+ by [Zachary Miller](https://github.com/CodeByZach). Casing/credential parsing and confidence signal in this fork by Ilia Alshanetsky.

License
-------

[](#license)

MIT. See [LICENSE](LICENSE). Upstream copyright notices are retained.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity48

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/2838354?v=4)[iliaa](/maintainers/iliaa)[@iliaa](https://github.com/iliaa)

---

Top Contributors

[![iliaal](https://avatars.githubusercontent.com/u/158724?v=4)](https://github.com/iliaal "iliaal (22 commits)")

---

Tags

credentialsfullnamehuman-namesname-parsername-parsingparserphptext-processingparsernamecredentialsfullnamename-parserhumanname

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/iliaal-nameparser/health.svg)

```
[![Health](https://phpackages.com/badges/iliaal-nameparser/health.svg)](https://phpackages.com/packages/iliaal-nameparser)
```

###  Alternatives

[nikic/php-parser

A PHP parser written in PHP

17.4k936.5M2.3k](/packages/nikic-php-parser)[doctrine/lexer

PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.

11.2k942.7M149](/packages/doctrine-lexer)[erusev/parsedown

Parser for Markdown.

15.0k155.2M835](/packages/erusev-parsedown)[league/commonmark

Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)

3.0k426.1M927](/packages/league-commonmark)[masterminds/html5

An HTML5 parser and serializer.

1.8k260.4M292](/packages/masterminds-html5)[sabberworm/php-css-parser

Parser for CSS Files written in PHP

1.8k204.2M72](/packages/sabberworm-php-css-parser)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
