PhoneE164Rule – Validace Telefonních Čísel
Custom validační rule pro ověřování telefonních čísel v mezinárodním E.164 formátu.
Přehled
PhoneE164Rule používá Google knihovnu libphonenumber k validaci telefonních čísel. Zajišťuje, že zadané číslo je:
- Validní v E.164 formátu (mezinárodní standard)
- Správně zformátované podle země
- Reálně existující formát
Instalace
Knihovna libphonenumber-for-php je již součástí projektu (v composer.json).
Použití
V Rakit Validaci
use Petrovo\Validation\Rules\PhoneE164Rule;
$rules = [
'phone' => 'required|' . PhoneE164Rule::class,
];
$validator = $validator->make($data, $rules);
if ($validator->fails()) {
$errors = $validator->errors();
// 'phone' => 'The phone must be a valid phone number'
}
Příklady Validních Formátů
// USA
+12015550123
// Česká republika
+420777123456
// Německo
+491234567890
// Francie
+33123456789
// Velká Británie
+441632960123
Příklady Nevalidních Formátů
// Bez plus
420777123456
// Místní formát bez kódu země
777123456
// Neexistující číslo
+999999999999
// Špatný formát
+1 (201) 555-0123 // Mezery nejsou v E.164
// Moc krátké
+1234
API
Vlastnosti
message– Chybová zpráva (výchozí: "The :attribute must be a valid phone number")
Metody
check(mixed $value): bool
Ověří, zda je hodnota validní E.164 telefon.
$rule = new PhoneE164Rule();
$rule->check('+420777123456'); // true
$rule->check('420777123456'); // false
$rule->check(''); // false
$rule->check(null); // false
Implementace
<?php
declare(strict_types=1);
namespace Petrovo\Validation\Rules;
use Rakit\Validation\Rule;
use libphonenumber\PhoneNumberUtil;
use libphonenumber\NumberParseException;
class PhoneE164Rule extends Rule
{
protected $message = 'The :attribute must be a valid phone number';
public function check(mixed $value): bool
{
if (empty($value)) {
return false;
}
$phoneUtil = PhoneNumberUtil::getInstance();
try {
$phoneNumber = $phoneUtil->parse($value, null);
return $phoneUtil->isValidNumber($phoneNumber);
} catch (NumberParseException) {
return false;
}
}
}
Chování
- Prázdné hodnoty → vrátí
false(usenullablepokud chceš volitelné) - Chybný formát → vrátí
false - Neexistující kód země → vrátí
false - NumberParseException → vrátí
false
Kombinace s Dalšími Rules
$rules = [
'phone' => 'nullable|' . PhoneE164Rule::class,
// nebo
'phone' => 'required|string|' . PhoneE164Rule::class,
];
E.164 Formát
E.164 je mezinárodní standard pro formátování telefonních čísel (ITU-T recommendation):
+[country code][number]
Příklady:
+1 (USA)
+420 (Česká republika)
+49 (Německo)
+33 (Francie)
Charakteristiky:
- Začíná
+ - Maximálně 15 číslic
- Bez mezer, pomlček nebo dalších znaků
- Globálně jedinečný identifikátor