our
$VERSION
= 1.20250323211831;
my
$formatters
= [
{
'format'
=>
'$1 $2 $3 $4'
,
'leading_digits'
=>
'5[45]'
,
'national_rule'
=>
'0$1'
,
'pattern'
=>
'(\\d{3})(\\d{2})(\\d{2})(\\d{2})'
},
{
'format'
=>
'$1-$2'
,
'leading_digits'
=> '
5(?:
2[2-46-9]|
3[3-9]|
9
)|
8(?:
0[89]|
92
)
',
'national_rule'
=>
'0$1'
,
'pattern'
=>
'(\\d{4})(\\d{5})'
},
{
'format'
=>
'$1-$2'
,
'leading_digits'
=>
'8'
,
'national_rule'
=>
'0$1'
,
'pattern'
=>
'(\\d{2})(\\d{7})'
},
{
'format'
=>
'$1-$2'
,
'leading_digits'
=>
'[5-7]'
,
'national_rule'
=>
'0$1'
,
'pattern'
=>
'(\\d{3})(\\d{6})'
}
];
my
$validators
= {
'fixed_line'
=> '
5(?:
2(?:
[0-25-79]\\d|
3[1-578]|
4[02-46-8]|
8[0235-7]
)|
3(?:
[0-47]\\d|
5[02-9]|
6[02-8]|
8[014-9]|
9[3-9]
)|
(?:
4[067]|
5[03]
)\\d
)\\d{5}
',
'geographic'
=> '
5(?:
2(?:
[0-25-79]\\d|
3[1-578]|
4[02-46-8]|
8[0235-7]
)|
3(?:
[0-47]\\d|
5[02-9]|
6[02-8]|
8[014-9]|
9[3-9]
)|
(?:
4[067]|
5[03]
)\\d
)\\d{5}
',
'mobile'
=> '
(?:
6(?:
[0-79]\\d|
8[0-247-9]
)|
7(?:
[0167]\\d|
2[0-467]|
5[0-3]|
8[0-5]
)
)\\d{6}
',
'pager'
=>
''
,
'personal_number'
=>
''
,
'specialrate'
=>
'(89\\d{7})'
,
'toll_free'
=>
'80[0-7]\\d{6}'
,
'voip'
=> '
(?:
592(?:
4[0-2]|
93
)|
80[89]\\d\\d
)\\d{4}
'
};
my
%areanames
= ();
$areanames
{en} = {
"2125228"
,
"Casablanca"
,
"212532"
,
"Fès\/Errachidia\/Meknès\/Nador\/Oujda\/Taza"
,
"2125381"
,
"Rabat"
,
"2125224"
,
"Casablanca"
,
"2125352"
,
"Taza"
,
"2125385"
,
"Tangier"
,
"2125377"
,
"Rabat"
,
"2125235"
,
"Oued\ Zem"
,
"2125246"
,
"El\ Youssoufia\/Safi"
,
"2125286"
,
"Tiznit"
,
"2125353"
,
"Midelt"
,
"2125374"
,
"Ouazzane"
,
"2125227"
,
"Casablanca"
,
"2125378"
,
"Salé"
,
"2125296"
,
"Marrakech"
,
"2125365"
,
"Oujda"
,
"2125359"
,
"Fès"
,
"2125395"
,
"Larache"
,
"2125397"
,
"Tétouan"
,
"2125367"
,
"Bouarfa\/Oujda"
,
"2125388"
,
"Tangier"
,
"2125289"
,
"Dakhla\/Laayoune"
,
"212530"
,
"Rabat\/Kènitra"
,
"2125225"
,
"Casablanca"
,
"2125384"
,
"Tangier"
,
"2125234"
,
"Settai"
,
"212529"
,
"Casablanca"
,
"2125282"
,
"Agadir\/Ait\ Meloul\/Inezgane"
,
"2125299"
,
"Agadir"
,
"2125398"
,
"Al\ Hoceima\/Chefchaouen"
,
"2125368"
,
"Figuig"
,
"2125394"
,
"Asilah"
,
"2125242"
,
"El\ Kelaa\ des\ Sraghna"
,
"2125237"
,
"Settat"
,
"2125375"
,
"Khémisset"
,
"2125283"
,
"Inezgane\/Taroudant"
,
"2125356"
,
"Fès"
,
"2125387"
,
"Fez\/Meknes"
,
"212521"
,
"Casablanca\/Central\ Morocco"
,
"2125243"
,
"Marrakech"
,
"2125220"
,
"Casablanca"
,
"2125222"
,
"Casablanca"
,
"2125354"
,
"Meknès"
,
"2125358"
,
"Ifrane"
,
"212525"
,
"Southern\ Morocco"
,
"2125366"
,
"Figuig\/Oujda"
,
"2125223"
,
"Casablanca"
,
"2125379"
,
"Souk\ Larbaa"
,
"2125396"
,
"Fnideq\/Martil\/Mdiq"
,
"2125372"
,
"Rabat"
,
"2125386"
,
"Fez\/Meknes"
,
"2125357"
,
"Goulmima"
,
"2125229"
,
"Casablanca"
,
"2125285"
,
"Oulad\ Teima\/Taroudant"
,
"2125373"
,
"Kénitra"
,
"2125233"
,
"El\ Jedida\/Mohammedia"
,
"2125287"
,
"Guelmim\/Tan\ Tan"
,
"2125247"
,
"Essaouira"
,
"212531"
,
"Tangier\/Al\ Hoceima\/Larache\/Tètouan\/Chefchaouen"
,
"2125380"
,
"Rabat"
,
"2125355"
,
"Meknès"
,
"2125232"
,
"Mohammedia"
,
"2125376"
,
"Rabat\/Témara"
,
"2125399"
,
"Al\ Hoceima\/Larache\/Tangier"
,
"2125298"
,
"Marrakech"
,
"2125288"
,
"Agadir\/Es\-Semara\/Tarfaya"
,
"2125389"
,
"Fez\/Meknes"
,
"2125244"
,
"Marrakech"
,
"212520"
,
"Casablanca"
,
"2125362"
,
"Berkane"
,
"2125248"
,
"Ouarzazate"
,
"2125297"
,
"Agadir"
,
"2125393"
,
"Tangier"
,
"2125363"
,
"Nador"
,
"2125226"
,
"Casablanca"
,};
$areanames
{fr} = {
"2125399"
,
"Tanger\/Larache\/Al\ Hoceima"
,
"212531"
,
"Tanger\/Tétouan\/Larache\/Al\ Hoceima\/Cherfchaouen"
,
"2125233"
,
"Mohammedia\/El\ Jadida"
,
"2125393"
,
"Tanger"
,
"2125288"
,
"Es\-Semara\/Agadir\/Tarfaya"
,
"2125389"
,
"Fès\/Maknès"
,
"2125366"
,
"Oujda\/Figuig"
,
"212525"
,
"Maroc\ Sud"
,
"2125285"
,
"Taroudannt\/Oulad\ Teima"
,
"2125386"
,
"Fès\/Maknès"
,
"2125384"
,
"Tanger"
,
"2125234"
,
"Settat"
,
"2125388"
,
"Tanger"
,
"2125289"
,
"Laayoune\/Dakhla"
,
"212530"
,
"Rabat\/Kénitra"
,
"2125367"
,
"Oujda\/Bouarfa"
,
"212521"
,
"Casablanca\/Maroc\ Central"
,
"2125283"
,
"Inezgane\/Taroudannt"
,
"2125387"
,
"Fès\/Maknès"
,
"2125282"
,
"Agadir\/Inezgane\/Ait\ Melou"
,
"2125246"
,
"Safi\/El\ Youssoufia"
,
"2125385"
,
"Tanger"
,
"212532"
,
"Fès\/Oujda\/Meknès\/Taza\/Nador\/Errachidia"
,};
my
$timezones
= {
''
=> [
'Atlantic/Canary'
]
};
sub
new {
my
$class
=
shift
;
my
$number
=
shift
;
$number
=~ s/(^\+212|\D)//g;
my
$self
=
bless
({
country_code
=>
'212'
,
number
=>
$number
,
formatters
=>
$formatters
,
validators
=>
$validators
,
timezones
=>
$timezones
,
areanames
=> \
%areanames
},
$class
);
return
$self
if
(
$self
->is_valid());
$number
=~ s/^(?:0)//;
$self
=
bless
({
country_code
=>
'212'
,
number
=>
$number
,
formatters
=>
$formatters
,
validators
=>
$validators
,
areanames
=> \
%areanames
},
$class
);
return
$self
->is_valid() ?
$self
:
undef
;
}
1;