Skip to content

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í

  1. Prázdné hodnoty → vrátí false (use nullable pokud chceš volitelné)
  2. Chybný formát → vrátí false
  3. Neexistující kód země → vrátí false
  4. 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

Reference