Phone Number 
The most advanced library to handle phone numbers  is libphonenumber  and the corresponding Symfony PhoneNumberBundle .
It allows you to represent phone number as value objects. It handles international phone numbers and it's compatible with all phone number formats.
Installation 
composer require odolbeau/phone-number-bundle
 
See documentation  for more details.
Parse phone number 
use libphonenumber\PhoneNumberUtil; 
/** @var libphonenumber\PhoneNumber $phoneNumber */ 
$phoneNumber = PhoneNumberUtil::getInstance()->parse('0324842988'); 
 
Doctrine 
In order to store phone number value object in your database, the bundle provide a Doctrine type :
doctrine : 
    dbal : 
        types : 
            phone_number :  Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType 
 
Note:  Phone numbers are stored in the international phone number format E.123 .
 
Then you can use this type in your Doctrine mapping:
use libphonenumber\PhoneNumber; 
class Foobar 
{ 
    private PhoneNumber $phone; 
} 
 
<?xml version="1.0" encoding="utf-8"?> 
<doctrine-mapping  xmlns= "http://doctrine-project.org/schemas/orm/doctrine-mapping"  xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation= "http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd" > 
  <entity  name= "App\Entity\Foobar" > 
    <field  name= "phone"  type= "phone_number"  column= "phone" /> 
</doctrine-mapping> 
 
The bundle provides a form type.
use libphonenumber\PhoneNumberFormat; 
use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType; 
use Symfony\Component\Form\FormBuilderInterface; 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('phone', PhoneNumberType::class, [ 
        'default_region' => 'FR', 
        'format' => PhoneNumberFormat::NATIONAL, 
    ]); 
} 
 
See documentation  for more details.
If you have many phone number input accross your application, I recommend you to create a form extension to set region and format on all inputs at the same time.
  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24namespace App\Infra\Form\Extension; 
use libphonenumber\PhoneNumberFormat; 
use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType; 
use Symfony\Component\Form\AbstractTypeExtension; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
class PhoneNumberExtension extends AbstractTypeExtension 
{ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
        $resolver->setDefaults([ 
            'default_region' => 'FR', 
            'format' => PhoneNumberFormat::NATIONAL, 
        ]); 
    } 
    public static function getExtendedTypes(): iterable 
    { 
        return [ 
            PhoneNumberType::class, 
        ]; 
    } 
} 
 
Region and format in the extension can be static like above or depends on your user settings for example.
Twig 
The bundle also provide a Twig filter to display phone numbers:
{{  foobar.phone | phone_number_format  }}  
 
See documentation  for other Twig filters.
                
                  
                    
 
  
    
      Last update: October 14, 2025