cherif/algerian-mobile-phone-number-laravel
Laravel integration for the cherif/algerian-mobile-phone-number value object. Provides an Eloquent cast to store/read Algerian mobile numbers as a value object, plus a validation rule for request input. Install via Composer and use in models/forms.
Installation:
composer require cherif/algerian-mobile-phone-number-laravel
Publish the config file (if needed):
php artisan vendor:publish --provider="CherifGsoul\AlgerianMobilePhoneNumber\AlgerianMobilePhoneNumberServiceProvider"
Basic Usage: Validate a phone number in a Laravel request:
use CherifGsoul\AlgerianMobilePhoneNumber\Rules\AlgerianMobilePhoneNumber;
$request->validate([
'phone' => ['required', new AlgerianMobilePhoneNumber],
]);
First Use Case:
AlgerianMobilePhoneNumber rule in a FormRequest or manually in a controller.$isValid = (new AlgerianMobilePhoneNumber)->passes('0612345678');
Request Validation:
// In a FormRequest
public function rules()
{
return [
'phone' => ['required', 'string', new AlgerianMobilePhoneNumber],
];
}
Custom Logic Integration:
$formatted = (new \CherifGsoul\AlgerianMobilePhoneNumber\AlgerianMobilePhoneNumber())->format('0612345678');
// Returns: "+213612345678"
$carrier = (new \CherifGsoul\AlgerianMobilePhoneNumber\AlgerianMobilePhoneNumber())->getCarrier('0612345678');
// Returns: "Djezzy" (or null if unsupported)
Database Storage:
+2136XXXXXXXX):
$normalized = (new \CherifGsoul\AlgerianMobilePhoneNumber\AlgerianMobilePhoneNumber())->normalize('0612345678');
$user->phone = $normalized;
$user->save();
API Responses:
return response()->json([
'phone' => $this->formatPhone($request->phone),
]);
public function handle($request, Closure $next)
{
$request->validate(['phone' => new AlgerianMobilePhoneNumber]);
return $next($request);
}
Deprecated Package:
cherif/algerian-mobile-number may have unaddressed bugs (check its GitHub issues).Carrier Detection:
getCarrier()) may return null for newer or less common operators. Handle gracefully:
$carrier = $validator->getCarrier($phone) ?? 'Unknown';
Format Inconsistencies:
0612345678). Ensure user input is stripped of:
" 061 234 5678" → 0612345678"06+123-45678" → 0612345678"+213612345678" → 0612345678 (use normalize() to reverse this).Edge Cases:
06123).05 (landline) or 07 (old mobile) may not be fully supported.Validation Errors:
ValidationException with default Laravel messages. Customize messages in your resources/lang:
'custom' => [
'phone' => [
'algerian_mobile_phone_number' => 'The :attribute must be a valid Algerian mobile number (e.g., 0612345678).',
],
],
Log Raw Input:
\Log::debug('Raw phone input:', ['phone' => $request->phone]);
Custom Rules: Extend the base rule for project-specific logic:
use CherifGsoul\AlgerianMobilePhoneNumber\Rules\AlgerianMobilePhoneNumber as BaseRule;
class ProjectSpecificPhoneRule extends BaseRule {
public function passes($attribute, $value) {
$isValid = parent::passes($attribute, $value);
// Add custom checks (e.g., blacklist numbers)
return $isValid && !$this->isBlacklisted($value);
}
}
Carrier Database:
Carrier::CARRIERS if new operators emerge.Testing:
public function test_algerian_phone_validation()
{
$this->assertTrue((new AlgerianMobilePhoneNumber)->passes('0612345678'));
$this->assertFalse((new AlgerianMobilePhoneNumber)->passes('051234567')); // Too short
}
No Config File: The package doesn’t publish a config file by default. If you need to tweak behavior (e.g., allowed prefixes), you’ll need to modify the service provider or fork the package.
Locale-Specific Rules:
Assumes Algerian numbers only. If your app supports multiple countries, combine with other validation libraries (e.g., giggsey/libphonenumber-for-php).
How can I help you explore Laravel packages today?