PHPackages                             osamaqazan/arabic-name - 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. osamaqazan/arabic-name

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

osamaqazan/arabic-name
======================

Smart Arabic compound name detection, parsing, shortening, and normalization. Handles عبد الله، أبو بكر، صلاح الدين and 200+ compound patterns.

v1.1.1(2mo ago)026↓66.7%MITPHPPHP &gt;=7.4CI failing

Since Feb 24Pushed 2mo agoCompare

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

READMEChangelogDependencies (2)Versions (5)Used By (0)

ArabicName
==========

[](#arabicname)

[![Tests](https://github.com/EngOsamaQazan/arabic-name/actions/workflows/tests.yml/badge.svg)](https://github.com/EngOsamaQazan/arabic-name/actions/workflows/tests.yml)[![Latest Version on Packagist](https://camo.githubusercontent.com/ffc0676c39a91175d1a004f49af19eb2463ade293ef34e2b59b90b44efe2914b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6f73616d6171617a616e2f6172616269632d6e616d652e737667)](https://packagist.org/packages/osamaqazan/arabic-name)[![Total Downloads](https://camo.githubusercontent.com/778350989aed0a1376471b9f336af3c8d663b32e2182383b8ff45fb1a5563dd2/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6f73616d6171617a616e2f6172616269632d6e616d652e737667)](https://packagist.org/packages/osamaqazan/arabic-name)[![PHP Version](https://camo.githubusercontent.com/b5fccf70fc409d9319722f0fe039292091246e141234d0daab49e2e8492085ce/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6f73616d6171617a616e2f6172616269632d6e616d652e737667)](https://packagist.org/packages/osamaqazan/arabic-name)[![License](https://camo.githubusercontent.com/5baa3ff374f07b17399eed68670e2560fb728e3786137a3d5b0d342f0e030ec6/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6f73616d6171617a616e2f6172616269632d6e616d652e737667)](https://packagist.org/packages/osamaqazan/arabic-name)

Smart Arabic compound name detection, parsing, shortening, and normalization for PHP.

Handles **200+ compound Arabic name patterns** including:

- Prefix compounds: عبد الله، أبو بكر، ابن خلدون، ذو الفقار
- Suffix compounds: صلاح الدين، نصر الله، سيف الإسلام، قمر الزمان
- Stuck compounds: عبدالله → عبد الله

Why ArabicName?
---------------

[](#why-arabicname)

Arabic names frequently contain **compound constructs** — two or more words that form a single logical name. Naive splitting breaks these names:

```
"عبد الله محمد أبو عليم"
  ❌ Naive:  first="عبد"  last="عليم"
  ✅ Smart:  first="عبد الله"  last="أبو عليم"

"نور الدين أحمد صلاح الدين"
  ❌ Naive:  first="نور"  last="الدين"
  ✅ Smart:  first="نور الدين"  last="صلاح الدين"

```

ArabicName solves this by understanding compound name patterns and treating them as single logical units.

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

[](#installation)

```
composer require osamaqazan/arabic-name
```

Quick Start
-----------

[](#quick-start)

```
use OsamaQazan\ArabicName\ArabicName;

// Shorten a name (first + last logical name)
ArabicName::shorten("عبد الله محمد أحمد صلاح الدين");
// → "عبد الله صلاح الدين"

// Parse into parts
$name = ArabicName::parse("عبد الله محمد أحمد صلاح الدين");
$name->first();    // "عبد الله"
$name->middle();   // ["محمد", "أحمد"]
$name->last();     // "صلاح الدين"
$name->short();    // "عبد الله صلاح الدين"
$name->initials(); // "ع.ص"

// Detect compound names
ArabicName::isCompound("عبد الله");     // true
ArabicName::isCompound("صلاح الدين");   // true
ArabicName::isCompound("محمد");          // false

// Normalize (fix spacing, remove tashkeel)
ArabicName::normalize("عبدالله");        // "عبد الله"
ArabicName::normalize("عَبْدُ اللَّهِ"); // "عبد الله"

// Detect gender
ArabicName::gender("عبد الله محمد");  // "male"
ArabicName::gender("فاطمة أحمد");     // "female"

// Transliterate to Latin
ArabicName::transliterate("عبد الله محمد"); // "Abdullah Mohammed"
ArabicName::transliterate("صلاح الدين");    // "Salahuddin"

// Compare names
ArabicName::areSame("عبدالله", "عبد الله");   // true
ArabicName::areSame("فاطمة", "فاطمه");        // true
ArabicName::similar("أحمد", "احمد");           // 1.0
```

Features
--------

[](#features)

FeatureDescription**Parsing**Split full names into first, middle, last respecting compounds**Shortening**Smart first + last name extraction**Normalization**Remove tashkeel, fix spacing, split stuck compounds**Compound Detection**Identify 200+ compound Arabic name patterns**Gender Detection**Detect gender from Arabic names**Transliteration**Convert Arabic names to Latin script**Similarity**Compare Arabic names with writing variation tolerance**Laravel Integration**Service provider, Blade directives, validation rulesAPI Reference
-------------

[](#api-reference)

### `ArabicName::parse(string $name): NameResult`

[](#arabicnameparsestring-name-nameresult)

Parses a full name into logical parts.

```
$r = ArabicName::parse("عبد الله محمد أحمد أبو عليم");
$r->first();     // "عبد الله"
$r->middle();    // ["محمد", "أحمد"]
$r->last();      // "أبو عليم"
$r->full();      // "عبد الله محمد أحمد أبو عليم"
$r->short();     // "عبد الله أبو عليم"
$r->initials();  // "ع.أ"
$r->gender();    // "male"
$r->greeting();  // "السيد عبد الله" (auto-detects السيد/السيدة)
$r->toArray();   // ['first' => ..., 'middle' => ..., 'last' => ..., ...]
```

### `ArabicName::shorten(string $name): string`

[](#arabicnameshortenstring-name-string)

Shortens a full name to first + last logical name.

```
ArabicName::shorten("محمد أحمد خالد أبو عليم");  // "محمد أبو عليم"
ArabicName::shorten("سيف الدين أحمد أبو البصل"); // "سيف الدين أبو البصل"
ArabicName::shorten("محمد أحمد نصر الله");        // "محمد نصر الله"
ArabicName::shorten("عبدالله محمد خالد");          // "عبد الله خالد"
```

### `ArabicName::isCompound(string $name): bool`

[](#arabicnameiscompoundstring-name-bool)

Checks if a name string is a compound name.

```
ArabicName::isCompound("عبد الله");    // true
ArabicName::isCompound("أبو بكر");     // true
ArabicName::isCompound("صلاح الدين");  // true
ArabicName::isCompound("محمد");         // false
ArabicName::isCompound("أحمد خالد");   // false
```

### `ArabicName::normalize(string $name): string`

[](#arabicnamenormalizestring-name-string)

Normalizes Arabic name text.

```
ArabicName::normalize("عبدالله");           // "عبد الله"
ArabicName::normalize("عبدالرحمن");         // "عبد الرحمن"
ArabicName::normalize("أبوالقاسم");          // "أبو القاسم"
ArabicName::normalize("عَبْدُ اللَّهِ");    // "عبد الله"
ArabicName::normalize("  محمد   أحمد  ");  // "محمد أحمد"
```

### `ArabicName::gender(string $name): string`

[](#arabicnamegenderstring-name-string)

Detect the likely gender of a name. Returns `'male'`, `'female'`, or `'unknown'`.

```
ArabicName::gender("محمد أحمد");      // "male"
ArabicName::gender("عبد الله");       // "male"
ArabicName::gender("فاطمة");          // "female"
ArabicName::gender("أم كلثوم");       // "female"

ArabicName::isMale("خالد محمد");      // true
ArabicName::isFemale("مريم أحمد");    // true
```

### `ArabicName::transliterate(string $name, string $standard = 'common'): string`

[](#arabicnametransliteratestring-name-string-standard--common-string)

Convert Arabic names to Latin script.

```
// Common standard (widely recognized spellings)
ArabicName::transliterate("محمد");              // "Mohammed"
ArabicName::transliterate("عبد الله");          // "Abdullah"
ArabicName::transliterate("صلاح الدين");        // "Salahuddin"
ArabicName::transliterate("عبد الله محمد أحمد"); // "Abdullah Mohammed Ahmed"
ArabicName::transliterate("ابن خلدون");         // "Ibn Khaldun"

// Formal standard (systematic transliteration)
ArabicName::transliterate("محمد", "formal");     // "Mhmd"
```

### `ArabicName::similar(string $name1, string $name2): float`

[](#arabicnamesimilarstring-name1-string-name2-float)

Calculate similarity between two Arabic names (0.0 - 1.0).

```
ArabicName::similar("أحمد", "احمد");              // 1.0 (hamza variation)
ArabicName::similar("فاطمة", "فاطمه");             // 1.0 (taa marbuta vs haa)
ArabicName::similar("مصطفى", "مصطفي");             // 1.0 (alef maqsura vs yaa)
ArabicName::similar("عبدالله", "عبد الله");         // 1.0 (stuck compound)
ArabicName::similar("محمد أحمد", "محمد أحمد خالد"); // ~0.7
```

### `ArabicName::areSame(string $name1, string $name2, float $threshold = 0.9): bool`

[](#arabicnamearesamestring-name1-string-name2-float-threshold--09-bool)

Check if two Arabic names are effectively the same.

```
ArabicName::areSame("عبدالله", "عبد الله");  // true
ArabicName::areSame("فاطمة", "فاطمه");       // true
ArabicName::areSame("محمد", "فاطمة");         // false
```

### Helper Methods

[](#helper-methods)

```
ArabicName::firstName("عبد الله محمد أحمد");   // "عبد الله"
ArabicName::lastName("محمد أحمد أبو عليم");    // "أبو عليم"
ArabicName::middleNames("عبد الله محمد القاضي"); // ["محمد"]
ArabicName::initials("عبد الله محمد صلاح الدين"); // "ع.ص"
```

### Custom Patterns

[](#custom-patterns)

Register additional compound patterns at runtime:

```
ArabicName::addPrefixes('شيخ');      // "شيخ محمد" → compound
ArabicName::addSuffixes('الأول');    // "محمد الأول" → compound
ArabicName::addPrefixes(['سيدي', 'مولاي']); // Multiple at once
```

Laravel Integration
-------------------

[](#laravel-integration)

ArabicName includes built-in Laravel support with auto-discovery.

### Blade Directives

[](#blade-directives)

```
@arabicShorten($user->name)
@arabicFirst($user->name)
@arabicInitials($user->name)
@arabicNormalize($user->name)
@arabicTransliterate($user->name)
```

### Validation Rules

[](#validation-rules)

```
use OsamaQazan\ArabicName\Laravel\Rules\ArabicCompoundName;
use OsamaQazan\ArabicName\Laravel\Rules\ArabicNameRule;

// Validate compound name
$request->validate([
    'name' => ['required', new ArabicCompoundName],
]);

// Validate Arabic name with minimum parts
$request->validate([
    'name' => ['required', new ArabicNameRule(minParts: 3)],
]);

// Using string rules
$request->validate([
    'name' => 'required|arabic_name',
    'family_name' => 'required|arabic_compound',
]);
```

### Facade

[](#facade)

```
use OsamaQazan\ArabicName\Laravel\Facades\ArabicName;

ArabicName::shorten($name);
ArabicName::parse($name)->first();
```

Supported Compound Patterns
---------------------------

[](#supported-compound-patterns)

### Prefixes (bind forward)

[](#prefixes-bind-forward)

PrefixExamplesعبدعبد الله، عبد الرحمن، عبد العزيز، عبد الكريم...أبو/ابوأبو بكر، أبو القاسم، أبو الحسن، أبو ذر...أم/امأم كلثوم، أم حبيبة...ابن/بنابن سينا، ابن خلدون، بن علي...بنتبنت الهدى، بنت الإسلام...ذو/ذيذو الفقار، ذو النورين...آلآل سعود، آل ثاني...امرؤامرؤ القيس### Suffixes (bind backward)

[](#suffixes-bind-backward)

SuffixExamplesالدينصلاح الدين، نور الدين، سيف الدين، عماد الدين، حسام الدين، شمس الدين، جمال الدين، بهاء الدين، فخر الدين، محيي الدين، برهان الدين، شرف الدين، سراج الدين...اللهنصر الله، فتح الله، حبيب الله، هبة الله، نعمة الله، عطية الله، فضل الله، رزق الله، كرم الله...الرحمنفضل الرحمن، عطاء الرحمن، رزق الرحمن، نصر الرحمن...الإسلامسيف الإسلام، نصير الإسلام، ناصر الإسلام، فخر الإسلام...الحقناصر الحق، نصير الحق، سيف الحق، مؤيد الحق...الدولةسيف الدولة، ناصر الدولة، عماد الدولة...الزمانقمر الزمان، فخر الزمان، بدر الزمان...الهدىنور الهدى، بنت الهدى...العابدينزين العابدينالملك/الملوكتاج الملوك، ناصر الملك...Requirements
------------

[](#requirements)

- PHP &gt;= 7.4
- `mbstring` extension
- Laravel &gt;= 8.0 (optional, for Laravel integration)

Testing
-------

[](#testing)

```
composer install
composer test
```

Static Analysis
---------------

[](#static-analysis)

```
composer analyse
```

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

[](#contributing)

Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.

Changelog
---------

[](#changelog)

Please see [CHANGELOG.md](CHANGELOG.md) for recent changes.

License
-------

[](#license)

MIT License - see [LICENSE](LICENSE) file.

Author
------

[](#author)

**Eng.Osama Qazan** —

---

بالعربي
-------

[](#بالعربي)

مكتبة PHP ذكية للتعامل مع الأسماء العربية المركبة. تكتشف وتعالج أكثر من 200 نمط تركيب في الأسماء العربية.

### المشكلة

[](#المشكلة)

عند اختصار الأسماء العربية، التقسيم البسيط يكسر الأسماء المركبة:

```
"عبد الله محمد أبو عليم"
  ❌ الطريقة الخاطئة: "عبد عليم"
  ✅ الطريقة الصحيحة: "عبد الله أبو عليم"

"نور الدين أحمد صلاح الدين"
  ❌ الطريقة الخاطئة: "نور الدين"
  ✅ الطريقة الصحيحة: "نور الدين صلاح الدين"

```

### المميزات

[](#المميزات)

- **تحليل الأسماء**: تقسيم الاسم الكامل إلى أول ووسط وأخير مع احترام التركيب
- **اختصار الأسماء**: استخراج الاسم الأول والأخير بذكاء
- **تطبيع الكتابة**: إزالة التشكيل وإصلاح المسافات
- **كشف الجنس**: تحديد جنس صاحب الاسم (ذكر/أنثى)
- **التحويل للاتينية**: تحويل الأسماء العربية إلى حروف لاتينية
- **مقارنة الأسماء**: مقارنة الأسماء مع تجاهل الاختلافات الكتابية
- **دعم Laravel**: مزود خدمة وموجهات Blade وقواعد تحقق

### الاستخدام

[](#الاستخدام)

```
use OsamaQazan\ArabicName\ArabicName;

// اختصار الاسم
ArabicName::shorten("عبد الله محمد أحمد صلاح الدين");
// ← "عبد الله صلاح الدين"

// تقسيم الاسم
$name = ArabicName::parse("عبد الله محمد أحمد صلاح الدين");
$name->first();    // "عبد الله"
$name->middle();   // ["محمد", "أحمد"]
$name->last();     // "صلاح الدين"

// كشف التركيب
ArabicName::isCompound("صلاح الدين"); // true

// تطبيع الكتابة
ArabicName::normalize("عبدالله"); // "عبد الله"

// كشف الجنس
ArabicName::gender("محمد");   // "male"
ArabicName::gender("فاطمة");  // "female"

// التحويل للاتينية
ArabicName::transliterate("عبد الله"); // "Abdullah"

// مقارنة الأسماء
ArabicName::areSame("فاطمة", "فاطمه"); // true
```

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance84

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 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

Every ~0 days

Total

4

Last Release

84d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/2984566799de8b4ad1606fcb0a5af1bb2caa938a044d02ec2a52b78e2a841b79?d=identicon)[OsamaQazan](/maintainers/OsamaQazan)

---

Top Contributors

[![EngOsamaQazan](https://avatars.githubusercontent.com/u/24553196?v=4)](https://github.com/EngOsamaQazan "EngOsamaQazan (5 commits)")

---

Tags

laravelparsershortenernamegendersimilaritytransliterationarabiccompoundعربياسماء

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/osamaqazan-arabic-name/health.svg)

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

###  Alternatives

[pherum/laravel-bbcode

Parse your BBCode easy with this library.

2427.5k](/packages/pherum-laravel-bbcode)

PHPackages © 2026

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