giggsey/libphonenumber-for-php-lite
Lite PHP port of Google’s libphonenumber: parse, validate, format, and store international phone numbers. Includes core PhoneNumberUtils only (no geolocation/carrier/short number info). Requires PHP 8.1+ and mbstring; install via Composer.
libphonenumber ensures consistency with industry standards.PhoneNumberService facade or service provider). It can be injected into controllers, jobs, or API responses without tight coupling.mbstring extension) simplify adoption. No database or external service dependencies exist.phone rule) for stricter regional rules.+1234567890 format).PhoneNumberUtil instance in a service provider’s boot() method to avoid initialization delays.getNumberType() can help, but Laravel apps should document limitations (e.g., "does not support carrier lookup").PhoneNumberUtil instance be cached (e.g., Redis) to avoid repeated metadata loads?isValidNumber() for strict regional validation.phone rule for basic format checks (e.g., E.164).libphonenumber-for-php package now to avoid migration effort.PhoneNumberService class to abstract implementation details (e.g., parsing, formatting). Example:
namespace App\Services;
use libphonenumber\PhoneNumberUtil;
use libphonenumber\PhoneNumberFormat;
class PhoneNumberService {
private PhoneNumberUtil $util;
public function __construct() {
$this->util = PhoneNumberUtil::getInstance();
}
public function parse(string $number, string $region): \libphonenumber\PhoneNumber {
return $this->util->parse($number, $region);
}
public function format(\libphonenumber\PhoneNumber $number, PhoneNumberFormat $format): string {
return $this->util->format($number, $format);
}
}
namespace App\Rules;
use libphonenumber\PhoneNumberUtil;
use libphonenumber\PhoneNumberFormat;
class ValidPhoneNumber implements Rule {
public function passes($attribute, $value) {
$util = PhoneNumberUtil::getInstance();
try {
$number = $util->parse($value, 'US'); // Default region or dynamic
return $util->isValidNumber($number);
} catch (\libphonenumber\NumberParseException $e) {
return false;
}
}
}
mbstring, which is enabled by default in most Laravel deployments.mbstring extension to php.ini if not already enabled.PhoneNumberService class (as shown above) and bind it in AppServiceProvider.ValidPhoneNumber rule).users table: phone_number column as string).PhoneNumberUtil for isolated testing).composer update giggsey/libphonenumber-for-php-lite).PHONE_NUMBER_HANDLING.md doc in the Laravel app to explain:
PhoneNumberUtil singleton loads metadata on first use. Preload it in a service provider’s boot() method for high-traffic apps.phone_number) for faster queries.| **Failure Scenario
How can I help you explore Laravel packages today?