PHPackages                             tijanieneye10/name-formatter - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. tijanieneye10/name-formatter

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

tijanieneye10/name-formatter
============================

A simple and lightweight PHP package for formatting and extracting information from full names. Perfect for applications that need to handle user names, display initials, or format names consistently

00[4 PRs](https://github.com/Tijanieneye10/name-formatter/pulls)PHPCI passing

Since Oct 13Pushed 1mo agoCompare

[ Source](https://github.com/Tijanieneye10/name-formatter)[ Packagist](https://packagist.org/packages/tijanieneye10/name-formatter)[ RSS](/packages/tijanieneye10-name-formatter/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (6)Used By (0)

Name Formatter
==============

[](#name-formatter)

[![Latest Version on Packagist](https://camo.githubusercontent.com/a17afce3272447000883adbb01e4b2b6188401dfd4c703fb57ef2d2a7a9120e2/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f74696a616e69656e65796531302f6e616d652d666f726d61747465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tijanieneye10/name-formatter)[![Tests](https://camo.githubusercontent.com/5e5818fc762f716dec3ca5e72a3f9246645e0a0ce46e98fe34ce89e15a153d44/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f74696a616e69656e65796531302f6e616d652d666f726d61747465722f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/tijanieneye10/name-formatter/actions/workflows/run-tests.yml)[![Total Downloads](https://camo.githubusercontent.com/50e2b894c85e7bb4c3b27766a88be16c3c770ae1c0e8b878ee0d5d93964306ba/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f74696a616e69656e65796531302f6e616d652d666f726d61747465722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/tijanieneye10/name-formatter)[![License](https://camo.githubusercontent.com/95c3f5b9cc653233ec4a3551670fd81e2f2c4fee9a98ef20f9902d091c38baba/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f74696a616e69656e65796531302f6e616d652d666f726d61747465722e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

A simple and lightweight PHP package for formatting and extracting information from full names. Perfect for applications that need to handle user names, display initials, or format names consistently.

Features
--------

[](#features)

- 🎯 **Extract first, middle, and last names** from full names with flexible format support
- 🔤 **Generate initials** from full names (supports multiple names)
- 📝 **Text case formatting** (toUpperCase, toLowerCase)
- 🎨 **Custom name formatting** with flexible templates
- 🌍 **Multi-cultural name support** (LFM, FML, LMF, FL, LF formats)
- 🖼️ **Generate avatar URLs** using UI Avatars service
- 🚀 **Simple and fluent API** with static factory method
- 💪 **PHP 8.4+** with modern features and strict typing
- 🧪 **Fully tested** with Pest PHP
- 🛡️ **Robust parsing** handles multiple spaces and edge cases

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

[](#installation)

You can install the package via Composer:

```
composer require tijanieneye10/name-formatter
```

**Note:** The package uses the namespace `Tijanieneye10\NameFormatter\NameFormatter` in your code.

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

[](#requirements)

- PHP 8.4 or higher

Usage
-----

[](#usage)

### Basic Usage

[](#basic-usage)

```
use Tijanieneye10\NameFormatter\NameFormatter;

// Create a new instance with default LFM format (Last, First, Middle)
$formatter = new NameFormatter('Eneye Tijani Usman');

// Or use the static factory method (recommended)
$formatter = NameFormatter::make('Eneye Tijani Usman');

// Specify custom name format
$formatter = NameFormatter::make('Tijani Usman Eneye', 'FML'); // First, Middle, Last
$formatter = NameFormatter::make('Eneye Usman Tijani', 'LMF'); // Last, Middle, First
```

### Name Format System

[](#name-format-system)

The `NameFormatter` supports different name order formats to accommodate various cultural naming conventions:

- **LFM (Last, First, Middle)** - Default format, common in Western cultures
- **FML (First, Middle, Last)** - Common in many cultures
- **LMF (Last, Middle, First)** - Alternative format
- **FL (First, Last)** - Two-name format
- **LF (Last, First)** - Two-name format

#### Extract Names

[](#extract-names)

```
// Using default LFM format (Last, First, Middle)
$formatter = NameFormatter::make('Eneye Tijani Usman');

// Get first name
$firstName = $formatter->firstname; // Returns: "Tijani"

// Get middle name(s)
$middleName = $formatter->middlename; // Returns: "Usman"

// Get last name
$lastName = $formatter->lastname; // Returns: "Eneye"

// Using FML format (First, Middle, Last)
$formatter = NameFormatter::make('Tijani Usman Eneye', 'FML');

$firstName = $formatter->firstname; // Returns: "Tijani"
$middleName = $formatter->middlename; // Returns: "Usman"
$lastName = $formatter->lastname; // Returns: "Eneye"
```

#### Generate Initials

[](#generate-initials)

```
// Using default LFM format (Last, First, Middle)
$formatter = NameFormatter::make('Eneye Tijani Usman');

// Get initials (supports multiple names)
$initials = $formatter->initials; // Returns: "ETU"

// Using FML format (First, Middle, Last)
$formatter = NameFormatter::make('Tijani Usman Eneye', 'FML');
$initials = $formatter->initials; // Returns: "TUE"
```

#### Text Formatting

[](#text-formatting)

```
$formatter = NameFormatter::make('john doe');

// Capitalize first letter
$capitalized = $formatter->toUpperCase(); // Returns: "John doe"

// Lowercase entire string
$lowercase = $formatter->toLowerCase(); // Returns: "john doe"
```

#### Custom Name Formatting

[](#custom-name-formatting)

```
// Using default LFM format (Last, First, Middle)
$formatter = NameFormatter::make('Eneye Tijani Usman');

// Default format: "Tijani Usman Eneye"
$default = $formatter->format();

// Custom formats using placeholders:
// F = First name, M = Middle name, L = Last name
$lastFirst = $formatter->format('L, F M'); // Returns: "Eneye, Tijani Usman"
$initialsOnly = $formatter->format('F. M. L.'); // Returns: "T. Usman. Eneye."
$formal = $formatter->format('L, F'); // Returns: "Eneye, Tijani"

// Using FML format (First, Middle, Last)
$formatter = NameFormatter::make('Tijani Usman Eneye', 'FML');
$default = $formatter->format(); // Returns: "Tijani Usman Eneye"
$lastFirst = $formatter->format('L, F M'); // Returns: "Eneye, Tijani Usman"
```

#### Generate Avatar URLs

[](#generate-avatar-urls)

```
// Using default LFM format (Last, First, Middle)
$formatter = NameFormatter::make('Eneye Tijani Usman');

// Generate avatar URL with default settings
$avatarUrl = $formatter->avatar(); // Returns: "https://ui-avatars.com/api/?name=Eneye%20Tijani%20Usman&size=100&background=3B82F6&color=FFFFFF&bold=true&format=svg"

// Customize avatar size and colors
$avatarUrl = $formatter->avatar(200, 'FF6B6B', 'FFFFFF'); // Custom size and background color

// Or use the alias method
$avatarUrl = $formatter->avatarUrl(150, '10B981', '000000'); // Green background, black text

// Access default avatar as property
$defaultAvatar = $formatter->avatar; // Same as $formatter->avatar()
```

### Real-World Examples

[](#real-world-examples)

#### User Profile Display

[](#user-profile-display)

```
$userName = 'eneye tijani usman';
$formatter = NameFormatter::make($userName);

echo "Welcome, " . $formatter->toUpperCase(); // "Welcome, Eneye tijani usman"
echo "Your initials: " . $formatter->initials; // "Your initials: ETU"
echo "Formal name: " . $formatter->format('L, F M'); // "Formal name: Eneye, Tijani Usman"
echo "Avatar: " . $formatter->avatar(80); // Generate 80x80 avatar
```

#### Form Processing

[](#form-processing)

```
$fullName = $_POST['full_name'] ?? '';
$formatter = NameFormatter::make($fullName);

$firstName = $formatter->firstname;
$middleName = $formatter->middlename;
$lastName = $formatter->lastname;
$initials = $formatter->initials;

// Use in database or display
```

#### Database Storage

[](#database-storage)

```
$fullName = 'Dr. Eneye Tijani Usman Jr.';
$formatter = NameFormatter::make($fullName);

$user = User::create([
    'first_name' => $formatter->firstname,
    'middle_name' => $formatter->middlename,
    'last_name' => $formatter->lastname,
    'initials' => $formatter->initials,
    'display_name' => $formatter->format('F M L'),
    'avatar_url' => $formatter->avatar(120),
]);
```

#### User Interface with Avatars

[](#user-interface-with-avatars)

```
$users = [
    'Eneye Tijani Usman',
    'Bello Aisha',
    'Ahmed Musa'
];

foreach ($users as $userName) {
    $formatter = NameFormatter::make($userName);

    echo '';
    echo '';
    echo '' . $formatter->format('F L') . '';
    echo 'Initials: ' . $formatter->initials . '';
    echo '';
}
```

#### Multi-Cultural Name Handling

[](#multi-cultural-name-handling)

```
// Western names (Last, First, Middle)
$westernName = NameFormatter::make('Smith John Michael', 'LFM');
echo $westernName->firstname; // "John"
echo $westernName->lastname;  // "Smith"

// Eastern names (First, Middle, Last)
$easternName = NameFormatter::make('Li Wei Chen', 'FML');
echo $easternName->firstname; // "Li"
echo $easternName->lastname;  // "Chen"

// Two-name format
$twoName = NameFormatter::make('Doe John', 'LF');
echo $twoName->firstname; // "John"
echo $twoName->lastname;  // "Doe"
```

### Edge Cases Handled

[](#edge-cases-handled)

- **Single names**: Returns the same value for first and last name
- **Multiple middle names**: Combines all middle names into one string
- **Extra spaces**: Automatically trims and normalizes spacing
- **Empty names**: Returns empty strings gracefully
- **Unicode support**: Properly handles international characters
- **Property access**: Provides both method and property access to name components
- **Format flexibility**: Automatically handles names with different numbers of parts

### Format Examples

[](#format-examples)

Here are examples of how different formats work with the same name:

```
$fullName = 'Eneye Tijani Usman';

// LFM format (default) - Last, First, Middle
$formatter = NameFormatter::make($fullName, 'LFM');
echo $formatter->firstname;  // "Tijani"
echo $formatter->middlename; // "Usman"
echo $formatter->lastname;   // "Eneye"
echo $formatter->initials;   // "ETU"

// FML format - First, Middle, Last
$formatter = NameFormatter::make($fullName, 'FML');
echo $formatter->firstname;  // "Eneye"
echo $formatter->middlename; // "Tijani"
echo $formatter->lastname;   // "Usman"
echo $formatter->initials;   // "ETU"

// LMF format - Last, Middle, First
$formatter = NameFormatter::make($fullName, 'LMF');
echo $formatter->firstname;  // "Usman"
echo $formatter->middlename; // "Tijani"
echo $formatter->lastname;   // "Eneye"
echo $formatter->initials;   // "ETU"
```

API Reference
-------------

[](#api-reference)

### Methods

[](#methods)

MethodDescriptionParametersReturns`make(string $fullname, string $format)`Static factory method`$fullname` - Full name string, `$format` - Name format (default: 'LFM')`NameFormatter` instance`toUpperCase()`Capitalize first letterNone`string``toLowerCase()`Lowercase entire stringNone`string``format(string $format)`Format name with template`$format` - Template string`string``avatar(int $size, string $bg, string $text)`Generate avatar URL`$size` - Size in pixels, `$bg` - Background color, `$text` - Text color`string``avatarUrl(...)`Alias for `avatar()` methodSame as `avatar()``string`### Constructor

[](#constructor)

```
new NameFormatter(string $fullname, string $format = 'LFM')
```

The constructor accepts a full name string and an optional format parameter that determines how the name parts are interpreted.

**Format Parameter:**

- **LFM** (default): Last, First, Middle - Common in Western cultures
- **FML**: First, Middle, Last - Common in many cultures
- **LMF**: Last, Middle, First - Alternative format
- **FL**: First, Last - Two-name format
- **LF**: Last, First - Two-name format

The format string uses single characters where:

- **F** = First name position
- **M** = Middle name position
- **L** = Last name position

### Properties (via `__get`)

[](#properties-via-__get)

The following properties are accessible through PHP's magic `__get` method, which internally calls private methods:

PropertyDescriptionReturns`firstname`First name`string``middlename`Middle name(s)`string``lastname`Last name`string``initials`Initials`string``avatar`Default avatar URL`string`### Format Template Placeholders

[](#format-template-placeholders)

PlaceholderDescription`F`First name`M`Middle name(s)`L`Last nameTesting
-------

[](#testing)

Run the test suite:

```
composer test
```

Run tests with coverage:

```
composer test-coverage
```

Code Formatting
---------------

[](#code-formatting)

Format your code using Laravel Pint:

```
composer format
```

Contributing
------------

[](#contributing)

Contributions are welcome! Please feel free to submit a Pull Request.

Security
--------

[](#security)

If you discover any security-related issues, please email  instead of using the issue tracker.

Credits
-------

[](#credits)

- [Tijani Eneye Usman](https://github.com/Tijanieneye10)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

22

—

LowBetter than 22% of packages

Maintenance60

Regular maintenance activity

Popularity0

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity19

Early-stage or recently created project

 Bus Factor1

Top contributor holds 89.1% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/fddf579818eeaf979b51cc463a6a7e2d8970058d1f4b22bc87371ee0d45b0b83?d=identicon)[Tijani Usman](/maintainers/Tijani%20Usman)

---

Top Contributors

[![Tijanieneye10](https://avatars.githubusercontent.com/u/55223841?v=4)](https://github.com/Tijanieneye10 "Tijanieneye10 (41 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (3 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (2 commits)")

### Embed Badge

![Health badge](/badges/tijanieneye10-name-formatter/health.svg)

```
[![Health](https://phpackages.com/badges/tijanieneye10-name-formatter/health.svg)](https://phpackages.com/packages/tijanieneye10-name-formatter)
```

PHPackages © 2026

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