File Coverage

blib/lib/Number/Phone/StubCountry/LU.pm
Criterion Covered Total %
statement 20 20 100.0
branch 3 4 75.0
condition n/a
subroutine 5 5 100.0
pod 1 1 100.0
total 29 30 96.6


line stmt bran cond sub pod time code
1             # automatically generated file, don't edit
2              
3              
4              
5             # Copyright 2023 David Cantrell, derived from data from libphonenumber
6             # http://code.google.com/p/libphonenumber/
7             #
8             # Licensed under the Apache License, Version 2.0 (the "License");
9             # you may not use this file except in compliance with the License.
10             # You may obtain a copy of the License at
11             #
12             # http://www.apache.org/licenses/LICENSE-2.0
13             #
14             # Unless required by applicable law or agreed to in writing, software
15             # distributed under the License is distributed on an "AS IS" BASIS,
16             # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17             # See the License for the specific language governing permissions and
18             # limitations under the License.
19             package Number::Phone::StubCountry::LU;
20 2     2   1345 use base qw(Number::Phone::StubCountry);
  2         5  
  2         252  
21              
22 2     2   15 use strict;
  2         9  
  2         59  
23 2     2   11 use warnings;
  2         6  
  2         52  
24 2     2   11 use utf8;
  2         5  
  2         23  
25             our $VERSION = 1.20230903131448;
26              
27             my $formatters = [
28             {
29             'format' => '$1 $2',
30             'leading_digits' => '
31             2(?:
32             0[2-689]|
33             [2-9]
34             )|
35             [3-57]|
36             8(?:
37             0[2-9]|
38             [13-9]
39             )|
40             9(?:
41             0[89]|
42             [2-579]
43             )
44             ',
45             'pattern' => '(\\d{2})(\\d{3})'
46             },
47             {
48             'format' => '$1 $2 $3',
49             'leading_digits' => '
50             2(?:
51             0[2-689]|
52             [2-9]
53             )|
54             [3-57]|
55             8(?:
56             0[2-9]|
57             [13-9]
58             )|
59             9(?:
60             0[89]|
61             [2-579]
62             )
63             ',
64             'pattern' => '(\\d{2})(\\d{2})(\\d{2})'
65             },
66             {
67             'format' => '$1 $2 $3',
68             'leading_digits' => '20[2-689]',
69             'pattern' => '(\\d{2})(\\d{2})(\\d{3})'
70             },
71             {
72             'format' => '$1 $2 $3 $4',
73             'leading_digits' => '
74             2(?:
75             [0367]|
76             4[3-8]
77             )
78             ',
79             'pattern' => '(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})'
80             },
81             {
82             'format' => '$1 $2 $3',
83             'leading_digits' => '
84             80[01]|
85             90[015]
86             ',
87             'pattern' => '(\\d{3})(\\d{2})(\\d{3})'
88             },
89             {
90             'format' => '$1 $2 $3 $4',
91             'leading_digits' => '20',
92             'pattern' => '(\\d{2})(\\d{2})(\\d{2})(\\d{3})'
93             },
94             {
95             'format' => '$1 $2 $3',
96             'leading_digits' => '6',
97             'pattern' => '(\\d{3})(\\d{3})(\\d{3})'
98             },
99             {
100             'format' => '$1 $2 $3 $4 $5',
101             'leading_digits' => '
102             2(?:
103             [0367]|
104             4[3-8]
105             )
106             ',
107             'pattern' => '(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{1,2})'
108             },
109             {
110             'format' => '$1 $2 $3 $4',
111             'leading_digits' => '
112             [3-57]|
113             8[13-9]|
114             9(?:
115             0[89]|
116             [2-579]
117             )|
118             (?:
119             2|
120             80
121             )[2-9]
122             ',
123             'pattern' => '(\\d{2})(\\d{2})(\\d{2})(\\d{1,5})'
124             }
125             ];
126              
127             my $validators = {
128             'fixed_line' => '
129             (?:
130             35[013-9]|
131             80[2-9]|
132             90[89]
133             )\\d{1,8}|
134             (?:
135             2[2-9]|
136             3[0-46-9]|
137             [457]\\d|
138             8[13-9]|
139             9[2-579]
140             )\\d{2,9}
141             ',
142             'geographic' => '
143             (?:
144             35[013-9]|
145             80[2-9]|
146             90[89]
147             )\\d{1,8}|
148             (?:
149             2[2-9]|
150             3[0-46-9]|
151             [457]\\d|
152             8[13-9]|
153             9[2-579]
154             )\\d{2,9}
155             ',
156             'mobile' => '
157             6(?:
158             [269][18]|
159             5[1568]|
160             7[189]|
161             81
162             )\\d{6}
163             ',
164             'pager' => '',
165             'personal_number' => '',
166             'specialrate' => '(801\\d{5})|(90[015]\\d{5})',
167             'toll_free' => '800\\d{5}',
168             'voip' => '
169             20(?:
170             1\\d{5}|
171             [2-689]\\d{1,7}
172             )
173             '
174             };
175             my %areanames = ();
176             $areanames{de} = {"3522699", "Ulflingen",
177             "3522451", "Düdelingen\/Bettemburg\/Livingen",
178             "3522792", "Kanton\ Clerf\/Fischbach\/Hosingen",
179             "35222", "Luxemburg",
180             "352240", "Luxemburg",
181             "3522481", "Ettelbrück\/Reckange\-sur\-Mess",
182             "3522458", "Soleuvre\/Differdingen",
183             "3522486", "Luxemburg",
184             "3522657", "Esch\-sur\-Alzette\/Schifflingen",
185             "3522737", "Leudelingen\/Ehlingen\/Monnerich",
186             "3522456", "Rümelingen",
187             "3522730", "Kanton\ Capellen\/Kehlen",
188             "3522687", "Fels",
189             "3522629", "Luxemburg\/Kockelscheuer",
190             "3522722", "Luxemburg",
191             "3522650", "Bascharage\/Petingen\/Rodingen",
192             "3522625", "Luxemburg",
193             "3522477", "Luxemburg",
194             "3522631", "Bartringen",
195             "3522492", "Kanton\ Clerf\/Fischbach\/Hosingen",
196             "3522751", "Düdelingen\/Bettemburg\/Livingen",
197             "3522623", "Bad\ Mondorf",
198             "3522676", "Wormeldingen",
199             "3522470", "Luxemburg",
200             "3522758", "Soleuvre\/Differdingen",
201             "35244", "Luxemburg",
202             "35257", "Esch\-sur\-Alzette\/Schifflingen",
203             "3522781", "Ettelbrück\/Reckange\-sur\-Mess",
204             "35297", "Huldingen",
205             "3522437", "Leudelingen\/Ehlingen\/Monnerich",
206             "35231", "Bartringen",
207             "35229", "Luxemburg",
208             "35232", "Kanton\ Mersch",
209             "3522636", "Hesperingen\/Kockelscheuer\/Roeser",
210             "3522430", "Kanton\ Capellen\/Kehlen",
211             "35255", "Esch\-sur\-Alzette\/Monnerich",
212             "3522756", "Rümelingen",
213             "3522652", "Düdelingen",
214             "3522732", "Lintgen\/Kanton\ Mersch\/Steinfort",
215             "35241", "Luxemburg",
216             "35299", "Ulflingen",
217             "352246", "Luxemburg",
218             "3522727", "Belair\,\ Luxemburg",
219             "3522797", "Huldingen",
220             "35225", "Luxemburg",
221             "3522455", "Esch\-sur\-Alzette\/Monnerich",
222             "3522667", "Düdelingen",
223             "35234", "Rammeldingen\/Senningerberg",
224             "35252", "Düdelingen",
225             "3522432", "Lintgen\/Kanton\ Mersch\/Steinfort",
226             "35276", "Wormeldingen",
227             "35251", "Düdelingen\/Bettemburg\/Livingen",
228             "3522675", "Distrikt\ Grevenmacher\-sur\-Moselle",
229             "3522427", "Belair\,\ Luxemburg",
230             "35235", "Sandweiler\/Mutfort\/Roodt\-sur\-Syre",
231             "3522489", "Luxemburg",
232             "3522628", "Luxemburg",
233             "3522633", "Walferdingen",
234             "3522497", "Huldingen",
235             "3522635", "Sandweiler\/Mutfort\/Roodt\-sur\-Syre",
236             "35237", "Leudelingen\/Ehlingen\/Monnerich",
237             "3522621", "Weicherdingen",
238             "3522634", "Rammeldingen\/Senningerberg",
239             "3522755", "Esch\-sur\-Alzette\/Monnerich",
240             "35292", "Kanton\ Clerf\/Fischbach\/Hosingen",
241             "35246", "Luxemburg",
242             "35258", "Differdingen",
243             "3522438", "Luxemburg",
244             "352241", "Luxemburg",
245             "35230", "Kanton\ Capellen\/Kehlen",
246             "3522476", "Wormeldingen",
247             "3522423", "Bad\ Mondorf",
248             "3522799", "Ulflingen",
249             "3522692", "Kanton\ Clerf\/Fischbach\/Hosingen",
250             "3522431", "Bartringen",
251             "3522787", "Fels",
252             "3522630", "Kanton\ Capellen\/Kehlen",
253             "3522750", "Bascharage\/Petingen\/Rodingen",
254             "3522729", "Luxemburg\/Kockelscheuer",
255             "3522436", "Hesperingen\/Kockelscheuer\/Roeser",
256             "35233", "Walferdingen",
257             "3522622", "Luxemburg",
258             "3522757", "Esch\-sur\-Alzette\/Schifflingen",
259             "3522444", "Luxemburg",
260             "3522637", "Leudelingen\/Ehlingen\/Monnerich",
261             "3522723", "Bad\ Mondorf",
262             "3522776", "Wormeldingen",
263             "35287", "Fels",
264             "35256", "Rümelingen",
265             "3522681", "Ettelbrück\/Reckange\-sur\-Mess",
266             "3522658", "Soleuvre\/Differdingen",
267             "35223", "Bad\ Mondorf",
268             "3522731", "Bartringen",
269             "3522725", "Luxemburg",
270             "3522651", "Düdelingen\/Bettemburg\/Livingen",
271             "3522499", "Ulflingen",
272             "3522736", "Hesperingen\/Kockelscheuer\/Roeser",
273             "3522429", "Luxemburg\/Kockelscheuer",
274             "3522450", "Bascharage\/Petingen\/Rodingen",
275             "3522656", "Rümelingen",
276             "3522487", "Fels",
277             "3522457", "Esch\-sur\-Alzette\/Schifflingen",
278             "3522627", "Belair\,\ Luxemburg",
279             "3522475", "Distrikt\ Grevenmacher\-sur\-Moselle",
280             "3522441", "Luxemburg",
281             "352249", "Luxemburg",
282             "3522752", "Düdelingen",
283             "3522632", "Lintgen\/Kanton\ Mersch\/Steinfort",
284             "3522434", "Rammeldingen\/Senningerberg",
285             "35250", "Bascharage\/Petingen\/Rodingen",
286             "352242", "Luxemburg",
287             "3522435", "Sandweiler\/Mutfort\/Roodt\-sur\-Syre",
288             "3522767", "Düdelingen",
289             "3522421", "Weicherdingen",
290             "3522697", "Huldingen",
291             "3522446", "Luxemburg",
292             "3522433", "Walferdingen",
293             "3522775", "Distrikt\ Grevenmacher\-sur\-Moselle",
294             "35228", "Luxemburg",
295             "3522482", "Luxemburg",
296             "3522452", "Düdelingen",
297             "35281", "Ettelbrück",
298             "3522721", "Weicherdingen",
299             "3522467", "Düdelingen",
300             "35236", "Hesperingen\/Kockelscheuer\/Roeser",
301             "3522735", "Sandweiler\/Mutfort\/Roodt\-sur\-Syre",
302             "3522655", "Esch\-sur\-Alzette\/Monnerich",
303             "3522734", "Rammeldingen\/Senningerberg",
304             "3522733", "Walferdingen",
305             "3522728", "Luxemburg",
306             "35275", "Distrikt\ Grevenmacher",};
307             $areanames{fr} = {"3522728", "Luxembourg\-Ville",
308             "35228", "Luxembourg\-Ville",
309             "3522428", "Luxembourg\-Ville",
310             "3522622", "Luxembourg\-Ville",
311             "35246", "Luxembourg\-Ville",
312             "3522628", "Luxembourg\-Ville",
313             "35241", "Luxembourg\-Ville",
314             "3522422", "Luxembourg\-Ville",
315             "35244", "Luxembourg\-Ville",
316             "3522722", "Luxembourg\-Ville",
317             "35222", "Luxembourg\-Ville",};
318             $areanames{en} = {"3522742", "Plateau\ de\ Kirchberg",
319             "3522649", "Howald",
320             "35247", "Lintgen",
321             "352240", "Luxembourg",
322             "3522481", "Ettelbruck\/Reckange\-sur\-Mess",
323             "35254", "Esch\-sur\-Alzette",
324             "3522458", "Soleuvre\/Differdange",
325             "35288", "Mertzig\/Wahl",
326             "35239", "Windhof\/Steinfort",
327             "35273", "Rosport",
328             "35222", "Luxembourg\ City",
329             "3522792", "Clervaux\/Fischbach\/Hosingen",
330             "3522451", "Dudelange\/Bettembourg\/Livange",
331             "3522699", "Troisvierges",
332             "3522488", "Mertzig\/Wahl",
333             "3522722", "Luxembourg\ City",
334             "3522629", "Luxembourg\/Kockelscheuer",
335             "3522650", "Bascharage\/Petange\/Rodange",
336             "3522456", "Rumelange",
337             "35245", "Diedrich",
338             "3522687", "Larochette",
339             "3522730", "Capellen\/Kehlen",
340             "3522737", "Leudelange\/Ehlange\/Mondercange",
341             "3522680", "Diekirch",
342             "3522486", "Luxembourg",
343             "3522657", "Esch\-sur\-Alzette\/Schifflange",
344             "3522470", "Luxembourg",
345             "3522758", "Soleuvre\/Differdange",
346             "3522781", "Ettelbruck\/Reckange\-sur\-Mess",
347             "35257", "Esch\-sur\-Alzette\/Schifflange",
348             "35244", "Luxembourg\ City",
349             "3522676", "Wormeldange",
350             "3522442", "Plateau\ de\ Kirchberg",
351             "3522623", "Mondorf\-les\-Bains\/Bascharage\/Noerdange\/Remich",
352             "3522788", "Mertzig\/Wahl",
353             "3522492", "Clervaux\/Fischbach\/Hosingen",
354             "3522751", "Dudelange\/Bettembourg\/Livange",
355             "3522477", "Luxembourg",
356             "3522625", "Luxembourg",
357             "3522631", "Bertrange\/Mamer\/Munsbach\/Strassen",
358             "35295", "Wiltz",
359             "35255", "Esch\-sur\-Alzette\/Mondercange",
360             "3522430", "Capellen\/Kehlen",
361             "3522695", "Wiltz",
362             "3522756", "Rumelange",
363             "3522678", "Junglinster",
364             "3522636", "Hesperange\/Kockelscheuer\/Roeser",
365             "3522643", "Findel\/Kirchberg",
366             "3522422", "Luxembourg\ City",
367             "35231", "Bertrange\/Mamer\/Munsbach\/Strassen",
368             "35229", "Luxembourg\/Kockelscheuer",
369             "35232", "Mersch",
370             "3522437", "Leudelange\/Ehlange\/Mondercange",
371             "3522645", "Diedrich",
372             "35297", "Huldange",
373             "3522671", "Betzdorf",
374             "352246", "Luxembourg",
375             "35299", "Troisvierges",
376             "35283", "Vianden",
377             "3522727", "Belair\,\ Luxembourg",
378             "3522732", "Lintgen\/Mersch\/Steinfort",
379             "35241", "Luxembourg\ City",
380             "3522639", "Windhof\/Steinfort",
381             "35242", "Plateau\ de\ Kirchberg",
382             "3522652", "Dudelange",
383             "3522759", "Soleuvre",
384             "35278", "Junglinster",
385             "3522667", "Dudelange",
386             "35234", "Rameldange\/Senningerberg",
387             "35280", "Diekirch",
388             "3522454", "Esch\-sur\-Alzette",
389             "3522747", "Lintgen",
390             "3522483", "Vianden",
391             "3522455", "Esch\-sur\-Alzette\/Mondercange",
392             "35225", "Luxembourg",
393             "3522772", "Echternach",
394             "3522679", "Berdorf\/Consdorf",
395             "3522484", "Han\/Lesse",
396             "3522453", "Esch\-sur\-Alzette",
397             "35259", "Soleuvre",
398             "3522740", "Howald",
399             "3522797", "Huldange",
400             "3522485", "Bissen\/Roost",
401             "3522674", "Wasserbillig",
402             "3522489", "Luxembourg",
403             "3522427", "Belair\,\ Luxembourg",
404             "3522675", "Grevenmacher\-sur\-Moselle",
405             "35235", "Sandweiler\/Moutfort\/Roodt\-sur\-Syre",
406             "3522420", "Luxembourg",
407             "3522459", "Soleuvre",
408             "35252", "Dudelange",
409             "3522648", "Contern\/Foetz",
410             "35276", "Wormeldange",
411             "35251", "Dudelange\/Bettembourg\/Livange",
412             "3522432", "Lintgen\/Mersch\/Steinfort",
413             "3522673", "Rosport",
414             "3522634", "Rameldange\/Senningerberg",
415             "3522755", "Esch\-sur\-Alzette\/Mondercange",
416             "3522783", "Vianden",
417             "35292", "Clervaux\/Fischbach\/Hosingen",
418             "3522447", "Lintgen",
419             "3522754", "Esch\-sur\-Alzette",
420             "35237", "Leudelange\/Ehlange\/Mondercange",
421             "3522635", "Sandweiler\/Moutfort\/Roodt\-sur\-Syre",
422             "3522621", "Weicherdange",
423             "35249", "Howald",
424             "3522785", "Bissen\/Roost",
425             "3522497", "Huldange",
426             "3522440", "Howald",
427             "3522753", "Esch\-sur\-Alzette",
428             "3522784", "Han\/Lesse",
429             "3522628", "Luxembourg\ City",
430             "3522472", "Echternach",
431             "3522633", "Walferdange",
432             "3522425", "Luxembourg",
433             "3522431", "Bertrange\/Mamer\/Munsbach\/Strassen",
434             "3522424", "Luxembourg",
435             "3522692", "Clervaux\/Fischbach\/Hosingen",
436             "3522799", "Troisvierges",
437             "3522438", "Luxembourg",
438             "35258", "Differdange",
439             "3522423", "Mondorf\-les\-Bains\/Bascharage\/Noerdange\/Remich",
440             "3522642", "Plateau\ de\ Kirchberg",
441             "3522749", "Howald",
442             "35284", "Han\/Lesse",
443             "35230", "Capellen\/Kehlen",
444             "352241", "Luxembourg",
445             "3522476", "Wormeldange",
446             "35246", "Luxembourg\ City",
447             "3522445", "Diedrich",
448             "3522637", "Leudelange\/Ehlange\/Mondercange",
449             "3522780", "Diekirch",
450             "3522471", "Betzdorf",
451             "3522444", "Luxembourg",
452             "3522757", "Esch\-sur\-Alzette\/Schifflange",
453             "3522750", "Bascharage\/Petange\/Rodange",
454             "3522478", "Junglinster",
455             "35279", "Berdorf\/Consdorf",
456             "3522443", "Findel\/Kirchberg",
457             "3522622", "Luxembourg\ City",
458             "3522729", "Luxembourg\/Kockelscheuer",
459             "35233", "Walferdange",
460             "3522436", "Hesperange\/Kockelscheuer\/Roeser",
461             "3522787", "Larochette",
462             "3522495", "Wiltz",
463             "3522630", "Capellen\/Kehlen",
464             "3522499", "Troisvierges",
465             "3522651", "Dudelange\/Bettembourg\/Livange",
466             "3522688", "Mertzig\/Wahl",
467             "3522731", "Bertrange\/Mamer\/Munsbach\/Strassen",
468             "3522725", "Luxembourg",
469             "35271", "Betzdorf",
470             "35256", "Rumelange",
471             "3522681", "Ettelbruck\/Reckange\-sur\-Mess",
472             "35272", "Echternach",
473             "3522658", "Soleuvre\/Differdange",
474             "35223", "Mondorf\-les\-Bains\/Bascharage\/Noerdange\/Remich",
475             "3522776", "Wormeldange",
476             "35287", "Larochette",
477             "3522449", "Howald",
478             "3522723", "Mondorf\-les\-Bains\/Bascharage\/Noerdange\/Remich",
479             "35248", "Contern\/Foetz",
480             "3522457", "Esch\-sur\-Alzette\/Schifflange",
481             "3522771", "Betzdorf",
482             "3522480", "Diekirch",
483             "3522745", "Diedrich",
484             "3522656", "Rumelange",
485             "3522795", "Wiltz",
486             "3522487", "Larochette",
487             "3522736", "Hesperange\/Kockelscheuer\/Roeser",
488             "3522429", "Luxembourg\/Kockelscheuer",
489             "3522743", "Findel\/Kirchberg",
490             "35285", "Bissen\/Roost",
491             "3522778", "Junglinster",
492             "3522450", "Bascharage\/Petange\/Rodange",
493             "3522448", "Contern\/Foetz",
494             "3522632", "Lintgen\/Mersch\/Steinfort",
495             "3522473", "Rosport",
496             "3522426", "Luxembourg",
497             "35274", "Wasserbillig",
498             "3522739", "Windhof\/Steinfort",
499             "352249", "Luxembourg",
500             "3522752", "Dudelange",
501             "3522659", "Soleuvre",
502             "3522475", "Grevenmacher\-sur\-Moselle",
503             "3522627", "Belair\,\ Luxembourg",
504             "3522441", "Luxembourg",
505             "3522474", "Wasserbillig",
506             "35253", "Esch\-sur\-Alzette",
507             "3522428", "Luxembourg\ City",
508             "3522672", "Echternach",
509             "3522433", "Walferdange",
510             "3522446", "Luxembourg",
511             "3522779", "Berdorf\/Consdorf",
512             "3522640", "Howald",
513             "3522697", "Huldange",
514             "3522435", "Sandweiler\/Moutfort\/Roodt\-sur\-Syre",
515             "3522647", "Lintgen",
516             "3522421", "Weicherdange",
517             "3522767", "Dudelange",
518             "3522434", "Rameldange\/Senningerberg",
519             "35250", "Bascharage\/Petange\/Rodange",
520             "35281", "Ettelbruck",
521             "3522452", "Dudelange",
522             "3522439", "Windhof\/Steinfort",
523             "3522773", "Rosport",
524             "3522748", "Contern\/Foetz",
525             "3522482", "Luxembourg",
526             "35243", "Findel\/Kirchberg",
527             "3522774", "Wasserbillig",
528             "35228", "Luxembourg\ City",
529             "3522775", "Grevenmacher\-sur\-Moselle",
530             "3522653", "Esch\-sur\-Alzette",
531             "3522685", "Bissen\/Roost",
532             "3522479", "Berdorf\/Consdorf",
533             "3522733", "Walferdange",
534             "35275", "Grevenmacher",
535             "3522684", "Han\/Lesse",
536             "3522728", "Luxembourg\ City",
537             "3522683", "Vianden",
538             "35240", "Howald",
539             "3522655", "Esch\-sur\-Alzette\/Mondercange",
540             "3522734", "Rameldange\/Senningerberg",
541             "3522467", "Dudelange",
542             "3522721", "Weicherdange",
543             "35236", "Hesperange\/Kockelscheuer\/Roeser",
544             "3522735", "Sandweiler\/Moutfort\/Roodt\-sur\-Syre",
545             "3522654", "Esch\-sur\-Alzette",};
546              
547             sub new {
548 19     19 1 38 my $class = shift;
549 19         32 my $number = shift;
550 19         122 $number =~ s/(^\+352|\D)//g;
551 19         105 my $self = bless({ country_code => '352', number => $number, formatters => $formatters, validators => $validators, areanames => \%areanames}, $class);
552 19 100       92 return $self if ($self->is_valid());
553 1         3 $number =~ s/^(?:(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\d))//;
554 1         14 $self = bless({ country_code => '352', number => $number, formatters => $formatters, validators => $validators, areanames => \%areanames}, $class);
555 1 50       5 return $self->is_valid() ? $self : undef;
556             }
557             1;