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