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   1330 use base qw(Number::Phone::StubCountry);
  2         5  
  2         251  
21              
22 2     2   16 use strict;
  2         7  
  2         55  
23 2     2   20 use warnings;
  2         6  
  2         54  
24 2     2   10 use utf8;
  2         19  
  2         13  
25             our $VERSION = 1.20230614174404;
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{fr} = {"3522628", "Luxembourg\-Ville",
177             "3522428", "Luxembourg\-Ville",
178             "3522722", "Luxembourg\-Ville",
179             "35246", "Luxembourg\-Ville",
180             "35241", "Luxembourg\-Ville",
181             "35222", "Luxembourg\-Ville",
182             "3522622", "Luxembourg\-Ville",
183             "35244", "Luxembourg\-Ville",
184             "3522422", "Luxembourg\-Ville",
185             "3522728", "Luxembourg\-Ville",
186             "35228", "Luxembourg\-Ville",};
187             $areanames{de} = {"3522482", "Luxemburg",
188             "3522681", "Ettelbrück\/Reckange\-sur\-Mess",
189             "3522499", "Ulflingen",
190             "352246", "Luxemburg",
191             "3522730", "Kanton\ Capellen\/Kehlen",
192             "3522467", "Düdelingen",
193             "3522652", "Düdelingen",
194             "3522451", "Düdelingen\/Bettemburg\/Livingen",
195             "3522729", "Luxemburg\/Kockelscheuer",
196             "3522750", "Bascharage\/Petingen\/Rodingen",
197             "3522723", "Bad\ Mondorf",
198             "35237", "Leudelingen\/Ehlingen\/Monnerich",
199             "3522775", "Distrikt\ Grevenmacher\-sur\-Moselle",
200             "3522787", "Fels",
201             "35252", "Düdelingen",
202             "3522776", "Wormeldingen",
203             "3522431", "Bartringen",
204             "3522632", "Lintgen\/Kanton\ Mersch\/Steinfort",
205             "352240", "Luxemburg",
206             "3522699", "Ulflingen",
207             "3522481", "Ettelbrück\/Reckange\-sur\-Mess",
208             "35275", "Distrikt\ Grevenmacher",
209             "3522758", "Soleuvre\/Differdingen",
210             "3522651", "Düdelingen\/Bettemburg\/Livingen",
211             "3522452", "Düdelingen",
212             "3522737", "Leudelingen\/Ehlingen\/Monnerich",
213             "3522667", "Düdelingen",
214             "35229", "Luxemburg",
215             "35255", "Esch\-sur\-Alzette\/Monnerich",
216             "3522446", "Luxemburg",
217             "35287", "Fels",
218             "35230", "Kanton\ Capellen\/Kehlen",
219             "3522625", "Luxemburg",
220             "3522757", "Esch\-sur\-Alzette\/Schifflingen",
221             "3522432", "Lintgen\/Kanton\ Mersch\/Steinfort",
222             "35228", "Luxemburg",
223             "3522631", "Bartringen",
224             "3522792", "Kanton\ Clerf\/Fischbach\/Hosingen",
225             "3522636", "Hesperingen\/Kockelscheuer\/Roeser",
226             "35258", "Differdingen",
227             "35297", "Huldingen",
228             "3522635", "Sandweiler\/Mutfort\/Roodt\-sur\-Syre",
229             "3522441", "Luxemburg",
230             "3522728", "Luxemburg",
231             "3522621", "Weicherdingen",
232             "35223", "Bad\ Mondorf",
233             "35225", "Luxemburg",
234             "3522477", "Luxemburg",
235             "35244", "Luxemburg",
236             "3522656", "Rümelingen",
237             "3522497", "Huldingen",
238             "352249", "Luxemburg",
239             "3522655", "Esch\-sur\-Alzette\/Monnerich",
240             "3522486", "Luxemburg",
241             "3522727", "Belair\,\ Luxemburg",
242             "3522734", "Rammeldingen\/Senningerberg",
243             "35241", "Luxemburg",
244             "3522733", "Walferdingen",
245             "35276", "Wormeldingen",
246             "35222", "Luxemburg",
247             "3522436", "Hesperingen\/Kockelscheuer\/Roeser",
248             "3522421", "Weicherdingen",
249             "3522435", "Sandweiler\/Mutfort\/Roodt\-sur\-Syre",
250             "35256", "Rümelingen",
251             "3522622", "Luxemburg",
252             "3522697", "Huldingen",
253             "3522456", "Rümelingen",
254             "35246", "Luxemburg",
255             "3522470", "Luxemburg",
256             "35251", "Düdelingen\/Bettemburg\/Livingen",
257             "3522455", "Esch\-sur\-Alzette\/Monnerich",
258             "3522722", "Luxemburg",
259             "35257", "Esch\-sur\-Alzette\/Schifflingen",
260             "3522633", "Walferdingen",
261             "3522489", "Luxemburg",
262             "3522492", "Kanton\ Clerf\/Fischbach\/Hosingen",
263             "35232", "Kanton\ Mersch",
264             "3522434", "Rammeldingen\/Senningerberg",
265             "3522427", "Belair\,\ Luxemburg",
266             "3522797", "Huldingen",
267             "352241", "Luxemburg",
268             "352242", "Luxemburg",
269             "35299", "Ulflingen",
270             "3522735", "Sandweiler\/Mutfort\/Roodt\-sur\-Syre",
271             "35250", "Bascharage\/Petingen\/Rodingen",
272             "3522721", "Weicherdingen",
273             "3522628", "Luxemburg",
274             "3522736", "Hesperingen\/Kockelscheuer\/Roeser",
275             "3522692", "Kanton\ Clerf\/Fischbach\/Hosingen",
276             "3522433", "Walferdingen",
277             "3522627", "Belair\,\ Luxemburg",
278             "3522634", "Rammeldingen\/Senningerberg",
279             "3522755", "Esch\-sur\-Alzette\/Monnerich",
280             "35235", "Sandweiler\/Mutfort\/Roodt\-sur\-Syre",
281             "35233", "Walferdingen",
282             "3522756", "Rümelingen",
283             "3522429", "Luxemburg\/Kockelscheuer",
284             "3522751", "Düdelingen\/Bettemburg\/Livingen",
285             "3522658", "Soleuvre\/Differdingen",
286             "3522444", "Luxemburg",
287             "3522637", "Leudelingen\/Ehlingen\/Monnerich",
288             "3522767", "Düdelingen",
289             "3522799", "Ulflingen",
290             "3522430", "Kanton\ Capellen\/Kehlen",
291             "35281", "Ettelbrück",
292             "3522657", "Esch\-sur\-Alzette\/Schifflingen",
293             "3522725", "Luxemburg",
294             "35292", "Kanton\ Clerf\/Fischbach\/Hosingen",
295             "3522731", "Bartringen",
296             "3522476", "Wormeldingen",
297             "3522487", "Fels",
298             "3522450", "Bascharage\/Petingen\/Rodingen",
299             "3522475", "Distrikt\ Grevenmacher\-sur\-Moselle",
300             "35234", "Rammeldingen\/Senningerberg",
301             "3522423", "Bad\ Mondorf",
302             "3522437", "Leudelingen\/Ehlingen\/Monnerich",
303             "3522752", "Düdelingen",
304             "3522458", "Soleuvre\/Differdingen",
305             "3522629", "Luxemburg\/Kockelscheuer",
306             "35231", "Bartringen",
307             "3522630", "Kanton\ Capellen\/Kehlen",
308             "3522781", "Ettelbrück\/Reckange\-sur\-Mess",
309             "3522676", "Wormeldingen",
310             "3522438", "Luxemburg",
311             "3522732", "Lintgen\/Kanton\ Mersch\/Steinfort",
312             "3522457", "Esch\-sur\-Alzette\/Schifflingen",
313             "3522623", "Bad\ Mondorf",
314             "35236", "Hesperingen\/Kockelscheuer\/Roeser",
315             "3522675", "Distrikt\ Grevenmacher\-sur\-Moselle",
316             "3522650", "Bascharage\/Petingen\/Rodingen",
317             "3522687", "Fels",};
318             $areanames{en} = {"35245", "Diedrich",
319             "3522743", "Findel\/Kirchberg",
320             "35243", "Findel\/Kirchberg",
321             "35230", "Capellen\/Kehlen",
322             "35287", "Larochette",
323             "3522446", "Luxembourg",
324             "3522631", "Bertrange\/Mamer\/Munsbach\/Strassen",
325             "35228", "Luxembourg\ City",
326             "3522780", "Diekirch",
327             "3522625", "Luxembourg",
328             "3522673", "Rosport",
329             "3522757", "Esch\-sur\-Alzette\/Schifflange",
330             "3522432", "Lintgen\/Mersch\/Steinfort",
331             "3522445", "Diedrich",
332             "3522679", "Berdorf\/Consdorf",
333             "35275", "Grevenmacher",
334             "35273", "Rosport",
335             "3522474", "Wasserbillig",
336             "3522481", "Ettelbruck\/Reckange\-sur\-Mess",
337             "3522699", "Troisvierges",
338             "3522737", "Leudelange\/Ehlange\/Mondercange",
339             "3522452", "Dudelange",
340             "3522667", "Dudelange",
341             "35253", "Esch\-sur\-Alzette",
342             "35255", "Esch\-sur\-Alzette\/Mondercange",
343             "35229", "Luxembourg\/Kockelscheuer",
344             "3522758", "Soleuvre\/Differdange",
345             "3522749", "Howald",
346             "3522651", "Dudelange\/Bettembourg\/Livange",
347             "3522787", "Larochette",
348             "3522795", "Wiltz",
349             "3522426", "Luxembourg",
350             "35280", "Diekirch",
351             "3522750", "Bascharage\/Petange\/Rodange",
352             "35237", "Leudelange\/Ehlange\/Mondercange",
353             "3522723", "Mondorf\-les\-Bains\/Bascharage\/Noerdange\/Remich",
354             "3522775", "Grevenmacher\-sur\-Moselle",
355             "35272", "Echternach",
356             "3522645", "Diedrich",
357             "3522632", "Lintgen\/Mersch\/Steinfort",
358             "352240", "Luxembourg",
359             "3522473", "Rosport",
360             "3522425", "Luxembourg",
361             "3522776", "Wormeldange",
362             "35252", "Dudelange",
363             "3522431", "Bertrange\/Mamer\/Munsbach\/Strassen",
364             "3522499", "Troisvierges",
365             "3522681", "Ettelbruck\/Reckange\-sur\-Mess",
366             "352246", "Luxembourg",
367             "3522674", "Wasserbillig",
368             "3522788", "Mertzig\/Wahl",
369             "3522730", "Capellen\/Kehlen",
370             "3522479", "Berdorf\/Consdorf",
371             "3522482", "Luxembourg",
372             "35242", "Plateau\ de\ Kirchberg",
373             "3522451", "Dudelange\/Bettembourg\/Livange",
374             "3522729", "Luxembourg\/Kockelscheuer",
375             "3522467", "Dudelange",
376             "3522652", "Dudelange",
377             "35246", "Luxembourg\ City",
378             "3522753", "Esch\-sur\-Alzette",
379             "35271", "Betzdorf",
380             "3522697", "Huldange",
381             "3522456", "Rumelange",
382             "3522685", "Bissen\/Roost",
383             "3522739", "Windhof\/Steinfort",
384             "3522470", "Luxembourg",
385             "35251", "Dudelange\/Bettembourg\/Livange",
386             "3522455", "Esch\-sur\-Alzette\/Mondercange",
387             "3522747", "Lintgen",
388             "3522771", "Betzdorf",
389             "35222", "Luxembourg\ City",
390             "35276", "Wormeldange",
391             "3522436", "Hesperange\/Kockelscheuer\/Roeser",
392             "3522678", "Junglinster",
393             "3522784", "Han\/Lesse",
394             "35241", "Luxembourg\ City",
395             "3522733", "Walferdange",
396             "3522442", "Plateau\ de\ Kirchberg",
397             "3522435", "Sandweiler\/Moutfort\/Roodt\-sur\-Syre",
398             "35256", "Rumelange",
399             "3522622", "Luxembourg\ City",
400             "3522421", "Weicherdange",
401             "3522748", "Contern\/Foetz",
402             "3522759", "Soleuvre",
403             "3522485", "Bissen\/Roost",
404             "3522656", "Rumelange",
405             "3522497", "Huldange",
406             "35223", "Mondorf\-les\-Bains\/Bascharage\/Noerdange\/Remich",
407             "3522740", "Howald",
408             "35259", "Soleuvre",
409             "35225", "Luxembourg",
410             "3522477", "Luxembourg",
411             "35244", "Luxembourg\ City",
412             "3522655", "Esch\-sur\-Alzette\/Mondercange",
413             "3522486", "Luxembourg",
414             "3522734", "Rameldange\/Senningerberg",
415             "3522727", "Belair\,\ Luxembourg",
416             "35279", "Berdorf\/Consdorf",
417             "3522783", "Vianden",
418             "352249", "Luxembourg",
419             "35248", "Contern\/Foetz",
420             "3522772", "Echternach",
421             "3522478", "Junglinster",
422             "3522792", "Clervaux\/Fischbach\/Hosingen",
423             "3522636", "Hesperange\/Kockelscheuer\/Roeser",
424             "35258", "Differdange",
425             "35274", "Wasserbillig",
426             "3522728", "Luxembourg\ City",
427             "3522441", "Luxembourg",
428             "3522621", "Weicherdange",
429             "3522422", "Luxembourg\ City",
430             "35249", "Howald",
431             "3522754", "Esch\-sur\-Alzette",
432             "35297", "Huldange",
433             "35254", "Esch\-sur\-Alzette",
434             "35278", "Junglinster",
435             "3522635", "Sandweiler\/Moutfort\/Roodt\-sur\-Syre",
436             "3522642", "Plateau\ de\ Kirchberg",
437             "3522634", "Rameldange\/Senningerberg",
438             "3522627", "Belair\,\ Luxembourg",
439             "3522447", "Lintgen",
440             "3522755", "Esch\-sur\-Alzette\/Mondercange",
441             "3522683", "Vianden",
442             "3522439", "Windhof\/Steinfort",
443             "3522756", "Rumelange",
444             "3522420", "Luxembourg",
445             "3522640", "Howald",
446             "35235", "Sandweiler\/Moutfort\/Roodt\-sur\-Syre",
447             "35240", "Howald",
448             "3522453", "Esch\-sur\-Alzette",
449             "35233", "Walferdange",
450             "3522459", "Soleuvre",
451             "3522448", "Contern\/Foetz",
452             "3522721", "Weicherdange",
453             "3522628", "Luxembourg\ City",
454             "3522742", "Plateau\ de\ Kirchberg",
455             "3522735", "Sandweiler\/Moutfort\/Roodt\-sur\-Syre",
456             "35250", "Bascharage\/Petange\/Rodange",
457             "3522654", "Esch\-sur\-Alzette",
458             "3522433", "Walferdange",
459             "3522672", "Echternach",
460             "3522736", "Hesperange\/Kockelscheuer\/Roeser",
461             "3522471", "Betzdorf",
462             "3522484", "Han\/Lesse",
463             "3522692", "Clervaux\/Fischbach\/Hosingen",
464             "3522639", "Windhof\/Steinfort",
465             "3522483", "Vianden",
466             "3522647", "Lintgen",
467             "3522427", "Belair\,\ Luxembourg",
468             "3522434", "Rameldange\/Senningerberg",
469             "3522653", "Esch\-sur\-Alzette",
470             "352241", "Luxembourg",
471             "3522440", "Howald",
472             "35247", "Lintgen",
473             "35299", "Troisvierges",
474             "3522785", "Bissen\/Roost",
475             "35285", "Bissen\/Roost",
476             "35283", "Vianden",
477             "3522797", "Huldange",
478             "3522454", "Esch\-sur\-Alzette",
479             "3522722", "Luxembourg\ City",
480             "35257", "Esch\-sur\-Alzette\/Schifflange",
481             "3522428", "Luxembourg\ City",
482             "3522648", "Contern\/Foetz",
483             "3522659", "Soleuvre",
484             "3522492", "Clervaux\/Fischbach\/Hosingen",
485             "3522778", "Junglinster",
486             "3522684", "Han\/Lesse",
487             "3522671", "Betzdorf",
488             "35232", "Mersch",
489             "3522472", "Echternach",
490             "3522489", "Luxembourg",
491             "3522633", "Walferdange",
492             "3522732", "Lintgen\/Mersch\/Steinfort",
493             "3522457", "Esch\-sur\-Alzette\/Schifflange",
494             "3522745", "Diedrich",
495             "35288", "Mertzig\/Wahl",
496             "3522676", "Wormeldange",
497             "3522480", "Diekirch",
498             "3522438", "Luxembourg",
499             "3522695", "Wiltz",
500             "3522687", "Larochette",
501             "35284", "Han\/Lesse",
502             "35236", "Hesperange\/Kockelscheuer\/Roeser",
503             "3522623", "Mondorf\-les\-Bains\/Bascharage\/Noerdange\/Remich",
504             "3522675", "Grevenmacher\-sur\-Moselle",
505             "3522650", "Bascharage\/Petange\/Rodange",
506             "3522443", "Findel\/Kirchberg",
507             "3522449", "Howald",
508             "3522458", "Soleuvre\/Differdange",
509             "3522629", "Luxembourg\/Kockelscheuer",
510             "3522424", "Luxembourg",
511             "3522437", "Leudelange\/Ehlange\/Mondercange",
512             "35295", "Wiltz",
513             "3522752", "Dudelange",
514             "35231", "Bertrange\/Mamer\/Munsbach\/Strassen",
515             "3522774", "Wasserbillig",
516             "3522688", "Mertzig\/Wahl",
517             "3522630", "Capellen\/Kehlen",
518             "3522781", "Ettelbruck\/Reckange\-sur\-Mess",
519             "35292", "Clervaux\/Fischbach\/Hosingen",
520             "3522680", "Diekirch",
521             "3522731", "Bertrange\/Mamer\/Munsbach\/Strassen",
522             "3522476", "Wormeldange",
523             "3522657", "Esch\-sur\-Alzette\/Schifflange",
524             "3522725", "Luxembourg",
525             "3522773", "Rosport",
526             "3522643", "Findel\/Kirchberg",
527             "3522450", "Bascharage\/Petange\/Rodange",
528             "3522475", "Grevenmacher\-sur\-Moselle",
529             "35234", "Rameldange\/Senningerberg",
530             "3522423", "Mondorf\-les\-Bains\/Bascharage\/Noerdange\/Remich",
531             "3522487", "Larochette",
532             "3522495", "Wiltz",
533             "35239", "Windhof\/Steinfort",
534             "3522444", "Luxembourg",
535             "3522637", "Leudelange\/Ehlange\/Mondercange",
536             "3522767", "Dudelange",
537             "3522429", "Luxembourg\/Kockelscheuer",
538             "3522751", "Dudelange\/Bettembourg\/Livange",
539             "3522658", "Soleuvre\/Differdange",
540             "3522649", "Howald",
541             "3522779", "Berdorf\/Consdorf",
542             "35281", "Ettelbruck",
543             "3522799", "Troisvierges",
544             "3522488", "Mertzig\/Wahl",
545             "3522430", "Capellen\/Kehlen",};
546              
547             sub new {
548 19     19 1 45 my $class = shift;
549 19         39 my $number = shift;
550 19         119 $number =~ s/(^\+352|\D)//g;
551 19         118 my $self = bless({ country_code => '352', number => $number, formatters => $formatters, validators => $validators, areanames => \%areanames}, $class);
552 19 100       110 return $self if ($self->is_valid());
553 1         4 $number =~ s/^(?:(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\d))//;
554 1         36 $self = bless({ country_code => '352', number => $number, formatters => $formatters, validators => $validators, areanames => \%areanames}, $class);
555 1 50       8 return $self->is_valid() ? $self : undef;
556             }
557             1;