phonelib 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +21 -3
- data/data/PhoneNumberMetaData.xml +246 -135
- data/data/phone_data.dat +0 -0
- data/lib/phonelib/core.rb +1 -1
- data/lib/phonelib/phone.rb +5 -0
- data/lib/phonelib/phone_analyzer.rb +1 -1
- data/lib/phonelib/version.rb +1 -1
- data/lib/validators/phone_validator.rb +29 -2
- metadata +41 -28
- checksums.yaml +0 -7
data/README.rdoc
CHANGED
@@ -48,13 +48,16 @@ Please note that passing blank value also fails.
|
|
48
48
|
|
49
49
|
Additional options:
|
50
50
|
|
51
|
-
validates :attribute, phone: { possible: true, allow_blank: true }
|
51
|
+
validates :attribute, phone: { possible: true, allow_blank: true, types: [:voip, :mobile] }
|
52
52
|
|
53
53
|
<tt>possible: true</tt> - enables validation to check whether the passed number is a possible phone number (not strict check).
|
54
54
|
Refer to {Google libphonenumber}[http://code.google.com/p/libphonenumber/] for more information on it.
|
55
55
|
|
56
56
|
<tt>allow_blank: true</tt> - when no value passed then validation passes
|
57
57
|
|
58
|
+
<tt>types: :mobile</tt> or <tt>types: [:voip, :mobile]</tt> - allows to validate against specific phone types patterns,
|
59
|
+
if mixed with <tt>possible</tt> will check if number is possible for specified type
|
60
|
+
|
58
61
|
=== Basic usage
|
59
62
|
|
60
63
|
To check if phone number is valid simply run:
|
@@ -93,8 +96,9 @@ Returned value is object of <tt>Phonelib::Phone</tt> class which have following
|
|
93
96
|
|
94
97
|
You can also fetch matched valid phone types
|
95
98
|
|
96
|
-
phone.types
|
97
|
-
phone.type
|
99
|
+
phone.types # returns array of all valid types
|
100
|
+
phone.type # returns first element from array of all valid types
|
101
|
+
phone.possible_types # returns array of all possible types
|
98
102
|
|
99
103
|
Possible types:
|
100
104
|
* <tt>:premium_rate</tt> - Premium Rate
|
@@ -134,3 +138,17 @@ Phone class has following attributes
|
|
134
138
|
Gem includes data from Google libphonenumber which has regex patterns for validations.
|
135
139
|
Valid patterns are more specific to phone type and country.
|
136
140
|
Possible patterns as usual are patterns with number of digits in number.
|
141
|
+
|
142
|
+
=== Development and tests
|
143
|
+
|
144
|
+
Everyone can do whatever he wants, the only limit is your imagination.
|
145
|
+
Just don't forget to write test before the pull request.
|
146
|
+
In order to run test without Rails functionality simply use
|
147
|
+
|
148
|
+
bundle exec rake spec
|
149
|
+
|
150
|
+
If you want to run including Rails environment, you need to set <tt>BUNDLE_GEMFILE</tt> while running the spec task, for example:
|
151
|
+
|
152
|
+
BUNDLE_GEMFILE=gemfiles/Gemfile.rails-3.2.x bundle exec rake spec
|
153
|
+
|
154
|
+
Gemfiles can be found in <tt>gemfiles</tt> folder, there are gemfiles for Rails 3.1, 3.2 and 4.
|
@@ -781,8 +781,8 @@
|
|
781
781
|
)
|
782
782
|
)
|
783
783
|
</leadingDigits>
|
784
|
-
<!-- We exclude here several 294X four-digit area codes: 2940, 2942, 2945, 2946 and 2948
|
785
|
-
and several 38[3578]X four-digit area codes. -->
|
784
|
+
<!-- We exclude here several 294X four-digit area codes: 2940, 2942, 2945, 2946 and 2948,
|
785
|
+
2983, and several 38[3578]X four-digit area codes. -->
|
786
786
|
<leadingDigits>
|
787
787
|
9(?:
|
788
788
|
2(?:
|
@@ -792,8 +792,9 @@
|
|
792
792
|
6[01346]|
|
793
793
|
80|
|
794
794
|
9(?:
|
795
|
-
[
|
796
|
-
4[13479]
|
795
|
+
[179]|
|
796
|
+
4[13479]|
|
797
|
+
8[0-24-9]
|
797
798
|
)
|
798
799
|
)|
|
799
800
|
3(?:
|
@@ -2419,8 +2420,7 @@
|
|
2419
2420
|
<mobile>
|
2420
2421
|
<nationalNumberPattern>
|
2421
2422
|
6(?:
|
2422
|
-
[0-
|
2423
|
-
3[0-7]|
|
2423
|
+
[0-689]\d|
|
2424
2424
|
7[0-2]
|
2425
2425
|
)\d{5}|
|
2426
2426
|
7\d{7}
|
@@ -2966,9 +2966,9 @@
|
|
2966
2966
|
<!-- http://en.wikipedia.org/wiki/%2B55 -->
|
2967
2967
|
<!-- http://www.itu.int/oth/T020200001D/en -->
|
2968
2968
|
<territory id="BR" countryCode="55"
|
2969
|
-
internationalPrefix="00(?:1[45]|2[135]|[
|
2969
|
+
internationalPrefix="00(?:1[45]|2[135]|31|4[13])"
|
2970
2970
|
nationalPrefix="0"
|
2971
|
-
nationalPrefixForParsing="0(?:(1[245]|2[135]|[
|
2971
|
+
nationalPrefixForParsing="0(?:(1[245]|2[135]|31|4[13])(\d{10,11}))?"
|
2972
2972
|
nationalPrefixTransformRule="$2" mobileNumberPortableRegion="true">
|
2973
2973
|
<!-- The national prefix for parsing here also contains a capturing group for the main number,
|
2974
2974
|
since the carrier codes here may also be area codes, so we want to check the length of
|
@@ -3123,6 +3123,7 @@
|
|
3123
3123
|
461|
|
3124
3124
|
502|
|
3125
3125
|
6(?:
|
3126
|
+
0[12]|
|
3126
3127
|
12|
|
3127
3128
|
7[67]|
|
3128
3129
|
8[78]|
|
@@ -4102,7 +4103,7 @@
|
|
4102
4103
|
<numberFormat pattern="(\d)(\d{4})(\d{4})"
|
4103
4104
|
nationalPrefixFormattingRule="($FG)"
|
4104
4105
|
carrierCodeFormattingRule="$CC ($FG)">
|
4105
|
-
<leadingDigits>
|
4106
|
+
<leadingDigits>22</leadingDigits>
|
4106
4107
|
<format>$1 $2 $3</format>
|
4107
4108
|
</numberFormat>
|
4108
4109
|
<numberFormat pattern="(\d{2})(\d{3})(\d{4})"
|
@@ -4148,6 +4149,12 @@
|
|
4148
4149
|
<leadingDigits>1</leadingDigits>
|
4149
4150
|
<format>$1 $2 $3</format>
|
4150
4151
|
</numberFormat>
|
4152
|
+
<numberFormat pattern="(\d{5})(\d{4})"
|
4153
|
+
nationalPrefixFormattingRule="($FG)"
|
4154
|
+
carrierCodeFormattingRule="$CC ($FG)">
|
4155
|
+
<leadingDigits>219</leadingDigits>
|
4156
|
+
<format>$1 $2</format>
|
4157
|
+
</numberFormat>
|
4151
4158
|
<!-- Format some short numbers as a block. -->
|
4152
4159
|
<numberFormat nationalPrefixFormattingRule="$FG"
|
4153
4160
|
pattern="(\d{4,5})">
|
@@ -4184,8 +4191,11 @@
|
|
4184
4191
|
http://www.subtel.cl/index.php?option=com_content&view=article&id=3081:&catid=3:noticias
|
4185
4192
|
-->
|
4186
4193
|
<nationalNumberPattern>
|
4194
|
+
2(?:
|
4195
|
+
2\d{7}|
|
4196
|
+
1962\d{4}
|
4197
|
+
)|
|
4187
4198
|
(?:
|
4188
|
-
22|
|
4189
4199
|
3[2-5]|
|
4190
4200
|
[47][1-35]|
|
4191
4201
|
5[1-3578]|
|
@@ -4491,8 +4501,8 @@
|
|
4491
4501
|
</leadingDigits>
|
4492
4502
|
<format>$1 $2 $3</format>
|
4493
4503
|
</numberFormat>
|
4494
|
-
<numberFormat pattern="(
|
4495
|
-
<leadingDigits>1[3-
|
4504
|
+
<numberFormat pattern="(\d{3})(\d{4})(\d{4})" carrierCodeFormattingRule="$CC $FG">
|
4505
|
+
<leadingDigits>1[3-578]</leadingDigits>
|
4496
4506
|
<format>$1 $2 $3</format>
|
4497
4507
|
</numberFormat>
|
4498
4508
|
<numberFormat pattern="(10800)(\d{3})(\d{4})">
|
@@ -4644,11 +4654,13 @@
|
|
4644
4654
|
<exampleNumber>1012345678</exampleNumber>
|
4645
4655
|
</fixedLine>
|
4646
4656
|
<mobile>
|
4657
|
+
<!-- 170, 176, 177 and 178 prefixes are introduced in early 2014 for 4G networks. -->
|
4647
4658
|
<nationalNumberPattern>
|
4648
4659
|
1(?:
|
4649
4660
|
[38]\d|
|
4650
4661
|
4[57]|
|
4651
|
-
5[0-35-9]
|
4662
|
+
5[0-35-9]|
|
4663
|
+
7[06-8]
|
4652
4664
|
)\d{8}
|
4653
4665
|
</nationalNumberPattern>
|
4654
4666
|
<possibleNumberPattern>\d{11}</possibleNumberPattern>
|
@@ -4806,10 +4818,7 @@
|
|
4806
4818
|
</fixedLine>
|
4807
4819
|
<mobile>
|
4808
4820
|
<nationalNumberPattern>
|
4809
|
-
5
|
4810
|
-
0[0-4]|
|
4811
|
-
7[0-3]
|
4812
|
-
)\d{5}|
|
4821
|
+
57[0-3]\d{5}|
|
4813
4822
|
6(?:
|
4814
4823
|
[0-2]\d|
|
4815
4824
|
30
|
@@ -5386,10 +5395,14 @@
|
|
5386
5395
|
(?:
|
5387
5396
|
18|
|
5388
5397
|
90
|
5389
|
-
)0
|
5398
|
+
)0|
|
5399
|
+
137
|
5390
5400
|
</leadingDigits>
|
5391
5401
|
<leadingDigits>
|
5392
|
-
|
5402
|
+
1(?:
|
5403
|
+
37|
|
5404
|
+
80
|
5405
|
+
)|
|
5393
5406
|
900[1359]
|
5394
5407
|
</leadingDigits>
|
5395
5408
|
<format>$1 $2 $3</format>
|
@@ -5420,6 +5433,10 @@
|
|
5420
5433
|
<leadingDigits>700</leadingDigits>
|
5421
5434
|
<format>$1 $2 $3</format>
|
5422
5435
|
</numberFormat>
|
5436
|
+
<numberFormat pattern="(138)(\d{4})">
|
5437
|
+
<leadingDigits>138</leadingDigits>
|
5438
|
+
<format>$1 $2</format>
|
5439
|
+
</numberFormat>
|
5423
5440
|
</availableFormats>
|
5424
5441
|
<generalDesc>
|
5425
5442
|
<!-- When deciding whether to assume a leading 49 is a country code or not, the number is
|
@@ -5513,7 +5530,10 @@
|
|
5513
5530
|
<exampleNumber>8001234567890</exampleNumber>
|
5514
5531
|
</tollFree>
|
5515
5532
|
<premiumRate>
|
5533
|
+
<!-- Includes the more expensive of the "televoting" line numbers. See the shared cost
|
5534
|
+
section for more information. -->
|
5516
5535
|
<nationalNumberPattern>
|
5536
|
+
137[7-9]\d{6}|
|
5517
5537
|
900(?:
|
5518
5538
|
[135]\d{6}|
|
5519
5539
|
9\d{7}
|
@@ -5523,8 +5543,23 @@
|
|
5523
5543
|
<exampleNumber>9001234567</exampleNumber>
|
5524
5544
|
</premiumRate>
|
5525
5545
|
<sharedCost>
|
5526
|
-
|
5527
|
-
|
5546
|
+
<!-- Includes some mass-traffic numbers, used for e.g. phone voting, raffles, since their
|
5547
|
+
costs when dialling from a fixed-line phone is similar.
|
5548
|
+
Prices:
|
5549
|
+
http://www.billiger-telefonieren.de/0180-0137-0900-sonderrufnummern/
|
5550
|
+
Documentation:
|
5551
|
+
http://www.bundesnetzagentur.de/SharedDocs/Downloads/DE/Sachgebiete/Telekommunikation/Unternehmen_Institutionen/Nummerierung/Rufnummern/0137/0137_Nummernplan.pdf?__blob=publicationFile&v=2
|
5552
|
+
-->
|
5553
|
+
<nationalNumberPattern>
|
5554
|
+
1(?:
|
5555
|
+
3(?:
|
5556
|
+
7[1-6]\d{6}|
|
5557
|
+
8\d{4}
|
5558
|
+
)|
|
5559
|
+
80\d{5,11}
|
5560
|
+
)
|
5561
|
+
</nationalNumberPattern>
|
5562
|
+
<possibleNumberPattern>\d{7,14}</possibleNumberPattern>
|
5528
5563
|
<exampleNumber>18012345</exampleNumber>
|
5529
5564
|
</sharedCost>
|
5530
5565
|
<personalNumber>
|
@@ -5644,7 +5679,8 @@
|
|
5644
5679
|
2[01]|
|
5645
5680
|
4[0-25-9]
|
5646
5681
|
)|
|
5647
|
-
50[0-4]
|
5682
|
+
50[0-4]|
|
5683
|
+
70[1-3]
|
5648
5684
|
)\d{4}
|
5649
5685
|
</nationalNumberPattern>
|
5650
5686
|
<exampleNumber>7674201234</exampleNumber>
|
@@ -6156,7 +6192,7 @@
|
|
6156
6192
|
092 and with 5 and 6 for 96. -->
|
6157
6193
|
<nationalNumberPattern>
|
6158
6194
|
(?:
|
6159
|
-
1(
|
6195
|
+
1(?:
|
6160
6196
|
3[23]\d|
|
6161
6197
|
5(?:
|
6162
6198
|
[23]|
|
@@ -6905,26 +6941,38 @@
|
|
6905
6941
|
<!-- Gabon -->
|
6906
6942
|
<!-- http://www.itu.int/oth/T020200004E/en -->
|
6907
6943
|
<!-- www.arcep.ga -->
|
6908
|
-
|
6944
|
+
<!-- Note: We cannot set nationalPrefix="0" while fixed line numbers can start with a zero
|
6945
|
+
as this breaks parsing (it treats all leading zeros as national prefixes. -->
|
6946
|
+
<territory id="GA" countryCode="241" internationalPrefix="00" leadingZeroPossible="true" >
|
6909
6947
|
<availableFormats>
|
6910
|
-
|
6948
|
+
<!-- If no leading zero was supplied, format with the national prefix. -->
|
6949
|
+
<numberFormat pattern="(\d)(\d{2})(\d{2})(\d{2})" nationalPrefixFormattingRule="0$FG">
|
6950
|
+
<leadingDigits>[2-7]</leadingDigits>
|
6911
6951
|
<format>$1 $2 $3 $4</format>
|
6912
6952
|
</numberFormat>
|
6953
|
+
<!-- This already has a leading zero so we format is "as is". -->
|
6954
|
+
<numberFormat pattern="(\d{2})(\d{2})(\d{2})(\d{2})">
|
6955
|
+
<leadingDigits>0</leadingDigits>
|
6956
|
+
<format>$1 $2 $3 $4</format>
|
6957
|
+
</numberFormat>
|
6913
6958
|
</availableFormats>
|
6914
6959
|
<generalDesc>
|
6915
|
-
<nationalNumberPattern>0
|
6916
|
-
<possibleNumberPattern>\d{8}</possibleNumberPattern>
|
6960
|
+
<nationalNumberPattern>0?\d{7}</nationalNumberPattern>
|
6961
|
+
<possibleNumberPattern>\d{7,8}</possibleNumberPattern>
|
6917
6962
|
</generalDesc>
|
6918
6963
|
<!-- A 7-digit fixed-line plan was scheduled to be implemented on June 17, 2012 to unify fixed
|
6919
|
-
line and mobile numbering. However,
|
6920
|
-
|
6921
|
-
|
6964
|
+
line and mobile numbering. However, this has only partially happened; mobile numbers can
|
6965
|
+
now be dialed without a leading zero, but fixed line numbers still require it. Their own
|
6966
|
+
website still lists fixed line numbers as "+241 01 44 68 11" and upon ringing they will
|
6967
|
+
not connect from outside the country without the 0. This was last tested March 2014. -->
|
6922
6968
|
<fixedLine>
|
6923
6969
|
<nationalNumberPattern>01\d{6}</nationalNumberPattern>
|
6970
|
+
<possibleNumberPattern>\d{8}</possibleNumberPattern>
|
6924
6971
|
<exampleNumber>01441234</exampleNumber>
|
6925
6972
|
</fixedLine>
|
6926
6973
|
<mobile>
|
6927
|
-
|
6974
|
+
<!-- Mobile numbers can be 7 or 8 digits (with or without a leading zero). -->
|
6975
|
+
<nationalNumberPattern>0?[2-7]\d{6}</nationalNumberPattern>
|
6928
6976
|
<exampleNumber>06031234</exampleNumber>
|
6929
6977
|
</mobile>
|
6930
6978
|
</territory>
|
@@ -7552,6 +7600,7 @@
|
|
7552
7600
|
58|
|
7553
7601
|
84
|
7554
7602
|
)|
|
7603
|
+
800|
|
7555
7604
|
938
|
7556
7605
|
)\d{4}
|
7557
7606
|
</nationalNumberPattern>
|
@@ -7561,7 +7610,7 @@
|
|
7561
7610
|
<nationalNumberPattern>
|
7562
7611
|
473(?:
|
7563
7612
|
4(?:
|
7564
|
-
0[
|
7613
|
+
0[2-79]|
|
7565
7614
|
1[04-9]|
|
7566
7615
|
20|
|
7567
7616
|
58
|
@@ -7569,7 +7618,8 @@
|
|
7569
7618
|
5(?:
|
7570
7619
|
2[01]|
|
7571
7620
|
3[3-8]
|
7572
|
-
)
|
7621
|
+
)|
|
7622
|
+
901
|
7573
7623
|
)\d{4}
|
7574
7624
|
</nationalNumberPattern>
|
7575
7625
|
<possibleNumberPattern>\d{10}</possibleNumberPattern>
|
@@ -7917,9 +7967,12 @@
|
|
7917
7967
|
<mobile>
|
7918
7968
|
<nationalNumberPattern>
|
7919
7969
|
(?:
|
7920
|
-
2[034678]|
|
7921
|
-
5
|
7922
|
-
|
7970
|
+
2[034678]\d|
|
7971
|
+
5(?:
|
7972
|
+
[047]\d|
|
7973
|
+
54
|
7974
|
+
)
|
7975
|
+
)\d{6}
|
7923
7976
|
</nationalNumberPattern>
|
7924
7977
|
<possibleNumberPattern>\d{9}</possibleNumberPattern>
|
7925
7978
|
<exampleNumber>231234567</exampleNumber>
|
@@ -8977,6 +9030,11 @@
|
|
8977
9030
|
<nationalNumberPattern>[1-9]\d{7,8}</nationalNumberPattern>
|
8978
9031
|
<possibleNumberPattern>\d{6,9}</possibleNumberPattern>
|
8979
9032
|
</generalDesc>
|
9033
|
+
<noInternationalDialling>
|
9034
|
+
<nationalNumberPattern>[48]0\d{6}</nationalNumberPattern>
|
9035
|
+
<possibleNumberPattern>\d{8}</possibleNumberPattern>
|
9036
|
+
<exampleNumber>80123456</exampleNumber>
|
9037
|
+
</noInternationalDialling>
|
8980
9038
|
<fixedLine>
|
8981
9039
|
<!-- Includes numbers for corporate networks. -->
|
8982
9040
|
<nationalNumberPattern>
|
@@ -9034,7 +9092,7 @@
|
|
9034
9092
|
nationalPrefix="0" nationalPrefixFormattingRule="$NP$FG">
|
9035
9093
|
<availableFormats>
|
9036
9094
|
<numberFormat nationalPrefixFormattingRule="($NP$FG)"
|
9037
|
-
pattern="(\d{2})(\d{
|
9095
|
+
pattern="(\d{2})(\d{5,8})">
|
9038
9096
|
<leadingDigits>
|
9039
9097
|
2[124]|
|
9040
9098
|
[36]1
|
@@ -9064,8 +9122,8 @@
|
|
9064
9122
|
<leadingDigits>800</leadingDigits>
|
9065
9123
|
<format>$1 $2</format>
|
9066
9124
|
</numberFormat>
|
9067
|
-
<numberFormat pattern="(
|
9068
|
-
<leadingDigits>
|
9125
|
+
<numberFormat pattern="(80\d)(\d)(\d{3})(\d{3})">
|
9126
|
+
<leadingDigits>80[79]</leadingDigits>
|
9069
9127
|
<format>$1 $2 $3 $4</format>
|
9070
9128
|
</numberFormat>
|
9071
9129
|
</availableFormats>
|
@@ -9078,10 +9136,15 @@
|
|
9078
9136
|
http://www.telkom.co.id/customer-services/area-and-country-code/?type=area.
|
9079
9137
|
We also added 0770 after user feedback because it seems to be used on Bintan island.
|
9080
9138
|
Where known, fixed mobile prefixes have been represented as Mobile. -->
|
9139
|
+
<!-- Very short (5/6 digit) local numbers in Jakarta seem to be special cases for various
|
9140
|
+
well known companies (Mc Donalds, KFC etc...). Some of these are listed in:
|
9141
|
+
http://cms.binus.edu/datapage/file/io/Spring2014SE/International_Student_Handbook_BINUS.pdf -->
|
9081
9142
|
<nationalNumberPattern>
|
9082
9143
|
2(?:
|
9083
9144
|
1(?:
|
9145
|
+
14\d{3}|
|
9084
9146
|
[0-8]\d{6,7}|
|
9147
|
+
500\d{3}|
|
9085
9148
|
9\d{6}
|
9086
9149
|
)|
|
9087
9150
|
[24]\d{7,8}
|
@@ -9243,6 +9306,16 @@
|
|
9243
9306
|
<possibleNumberPattern>\d{8,11}</possibleNumberPattern>
|
9244
9307
|
<exampleNumber>8001234567</exampleNumber>
|
9245
9308
|
</tollFree>
|
9309
|
+
<uan>
|
9310
|
+
<nationalNumberPattern>8071\d{6}</nationalNumberPattern>
|
9311
|
+
<possibleNumberPattern>\d{10}</possibleNumberPattern>
|
9312
|
+
<exampleNumber>8071123456</exampleNumber>
|
9313
|
+
</uan>
|
9314
|
+
<noInternationalDialling>
|
9315
|
+
<nationalNumberPattern>8071\d{6}</nationalNumberPattern>
|
9316
|
+
<possibleNumberPattern>\d{10}</possibleNumberPattern>
|
9317
|
+
<exampleNumber>8071123456</exampleNumber>
|
9318
|
+
</noInternationalDialling>
|
9246
9319
|
<!-- The information below is provided by an Indonesian -->
|
9247
9320
|
<premiumRate>
|
9248
9321
|
<nationalNumberPattern>809\d{7}</nationalNumberPattern>
|
@@ -9564,7 +9637,7 @@
|
|
9564
9637
|
47\d|
|
9565
9638
|
6(?:
|
9566
9639
|
5\d|
|
9567
|
-
8[
|
9640
|
+
8[068]
|
9568
9641
|
)|
|
9569
9642
|
7\d{2}|
|
9570
9643
|
8(?:
|
@@ -9697,6 +9770,7 @@
|
|
9697
9770
|
<numberFormat pattern="(\d{2})(\d{2})(\d{6})">
|
9698
9771
|
<leadingDigits>
|
9699
9772
|
7(?:
|
9773
|
+
0[2-4]|
|
9700
9774
|
2[0579]|
|
9701
9775
|
3[057-9]|
|
9702
9776
|
4[0-389]|
|
@@ -9719,6 +9793,11 @@
|
|
9719
9793
|
</leadingDigits>
|
9720
9794
|
<leadingDigits>
|
9721
9795
|
7(?:
|
9796
|
+
0(?:
|
9797
|
+
2[2-9]|
|
9798
|
+
3|
|
9799
|
+
4[0-7]
|
9800
|
+
)|
|
9722
9801
|
2(?:
|
9723
9802
|
0[04-9]|
|
9724
9803
|
5[09]|
|
@@ -10183,6 +10262,11 @@
|
|
10183
10262
|
<nationalNumberPattern>
|
10184
10263
|
(?:
|
10185
10264
|
7(?:
|
10265
|
+
0(?:
|
10266
|
+
2[2-9]|
|
10267
|
+
3\d|
|
10268
|
+
4[0-7]
|
10269
|
+
)|
|
10186
10270
|
2(?:
|
10187
10271
|
0[04-9]|
|
10188
10272
|
5[09]|
|
@@ -12567,7 +12651,8 @@
|
|
12567
12651
|
started issuing fixed-line numbers like this. Apparently, mobile-company-issued
|
12568
12652
|
fixed-line numbers are one digit longer than government-issued numbers. Moreover, the
|
12569
12653
|
range beginning with 6 seems to include some numbers that are one digit longer as well.
|
12570
|
-
Allowing 238\d{6} based on information from Cambodia Yellow Pages.
|
12654
|
+
Allowing 238\d{6} and 234[234]\d{4} based on information from Cambodia Yellow Pages.
|
12655
|
+
Note that numbers beginning with 234 are split across two patterns. -->
|
12571
12656
|
<nationalNumberPattern>
|
12572
12657
|
(?:
|
12573
12658
|
2[3-6]|
|
@@ -12580,7 +12665,10 @@
|
|
12580
12665
|
5\d|
|
12581
12666
|
6\d?
|
12582
12667
|
)\d{5}|
|
12583
|
-
|
12668
|
+
23(?:
|
12669
|
+
4[234]|
|
12670
|
+
8\d{2}
|
12671
|
+
)\d{4}
|
12584
12672
|
</nationalNumberPattern>
|
12585
12673
|
<possibleNumberPattern>\d{6,9}</possibleNumberPattern>
|
12586
12674
|
<exampleNumber>23756789</exampleNumber>
|
@@ -12652,7 +12740,8 @@
|
|
12652
12740
|
<!-- Numbers should be formatted as a block." -->
|
12653
12741
|
<generalDesc>
|
12654
12742
|
<nationalNumberPattern>
|
12655
|
-
[
|
12743
|
+
[2458]\d{4}|
|
12744
|
+
3\d{4,7}|
|
12656
12745
|
7\d{7}
|
12657
12746
|
</nationalNumberPattern>
|
12658
12747
|
<possibleNumberPattern>\d{5,8}</possibleNumberPattern>
|
@@ -12682,6 +12771,11 @@
|
|
12682
12771
|
<possibleNumberPattern>\d{8}</possibleNumberPattern>
|
12683
12772
|
<exampleNumber>72012345</exampleNumber>
|
12684
12773
|
</mobile>
|
12774
|
+
<premiumRate>
|
12775
|
+
<!-- ITU refers to these as "Telemedia and audiotext". -->
|
12776
|
+
<nationalNumberPattern>3001\d{4}</nationalNumberPattern>
|
12777
|
+
<exampleNumber>30010000</exampleNumber>
|
12778
|
+
</premiumRate>
|
12685
12779
|
</territory>
|
12686
12780
|
|
12687
12781
|
<!-- Comoros -->
|
@@ -12744,7 +12838,7 @@
|
|
12744
12838
|
)|
|
12745
12839
|
302|
|
12746
12840
|
4(?:
|
12747
|
-
6[
|
12841
|
+
6[015-9]|
|
12748
12842
|
70
|
12749
12843
|
)
|
12750
12844
|
)\d{4}
|
@@ -12764,7 +12858,8 @@
|
|
12764
12858
|
)\d{4}
|
12765
12859
|
</nationalNumberPattern>
|
12766
12860
|
<possibleNumberPattern>\d{10}</possibleNumberPattern>
|
12767
|
-
|
12861
|
+
<!-- Example number from the ITU document. -->
|
12862
|
+
<exampleNumber>8697652917</exampleNumber>
|
12768
12863
|
</mobile>
|
12769
12864
|
<tollFree>
|
12770
12865
|
<nationalNumberPattern>
|
@@ -13421,25 +13516,36 @@
|
|
13421
13516
|
<numberFormat pattern="([2-8]\d)(\d{3})(\d{3})">
|
13422
13517
|
<leadingDigits>
|
13423
13518
|
2[13]|
|
13424
|
-
[
|
13519
|
+
3[14]|
|
13520
|
+
[4-8]
|
13425
13521
|
</leadingDigits>
|
13426
13522
|
<format>$1 $2 $3</format>
|
13427
13523
|
</numberFormat>
|
13524
|
+
<numberFormat pattern="(30)(\d{2})(\d{2})(\d{3})">
|
13525
|
+
<leadingDigits>30</leadingDigits>
|
13526
|
+
<format>$1 $2 $3 $4</format>
|
13527
|
+
</numberFormat>
|
13428
13528
|
</availableFormats>
|
13429
13529
|
<generalDesc>
|
13430
13530
|
<nationalNumberPattern>[2-8]\d{7,9}</nationalNumberPattern>
|
13431
13531
|
<possibleNumberPattern>\d{6,10}</possibleNumberPattern>
|
13432
13532
|
</generalDesc>
|
13433
13533
|
<fixedLine>
|
13534
|
+
<!-- The Lonely Planet says that newer WIN phones (fixed phones without a physical landline)
|
13535
|
+
start with 030 (and are longer). There are plenty of examples online. -->
|
13434
13536
|
<nationalNumberPattern>
|
13435
13537
|
(?:
|
13436
13538
|
2[13]|
|
13437
|
-
|
13539
|
+
3(?:
|
13540
|
+
0\d|
|
13541
|
+
[14]
|
13542
|
+
)|
|
13543
|
+
[5-7][14]|
|
13438
13544
|
41|
|
13439
13545
|
8[1468]
|
13440
13546
|
)\d{6}
|
13441
13547
|
</nationalNumberPattern>
|
13442
|
-
<possibleNumberPattern>\d{6,
|
13548
|
+
<possibleNumberPattern>\d{6,9}</possibleNumberPattern>
|
13443
13549
|
<exampleNumber>21212862</exampleNumber>
|
13444
13550
|
</fixedLine>
|
13445
13551
|
<mobile>
|
@@ -13545,26 +13651,22 @@
|
|
13545
13651
|
<possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
|
13546
13652
|
</generalDesc>
|
13547
13653
|
<fixedLine>
|
13548
|
-
<!-- Adding 430
|
13654
|
+
<!-- Adding 430 since numbers have been found with these prefixes online. -->
|
13549
13655
|
<nationalNumberPattern>
|
13550
13656
|
758(?:
|
13551
|
-
234|
|
13552
13657
|
4(?:
|
13553
13658
|
30|
|
13554
13659
|
5[0-9]|
|
13555
13660
|
6[2-9]|
|
13556
13661
|
8[0-2]
|
13557
13662
|
)|
|
13558
|
-
|
13559
|
-
638
|
13560
|
-
758
|
13663
|
+
57[0-2]|
|
13664
|
+
638
|
13561
13665
|
)\d{4}
|
13562
13666
|
</nationalNumberPattern>
|
13563
|
-
<exampleNumber>
|
13667
|
+
<exampleNumber>7584305678</exampleNumber>
|
13564
13668
|
</fixedLine>
|
13565
13669
|
<mobile>
|
13566
|
-
<!-- Adding 72[1256] as these prefixes are found widely on the internet and SMS messages
|
13567
|
-
have been successfully delivered to these numbers. -->
|
13568
13670
|
<nationalNumberPattern>
|
13569
13671
|
758(?:
|
13570
13672
|
28[4-7]|
|
@@ -13580,7 +13682,7 @@
|
|
13580
13682
|
)|
|
13581
13683
|
7(?:
|
13582
13684
|
1[2-9]|
|
13583
|
-
2[0-
|
13685
|
+
2[0-8]
|
13584
13686
|
)
|
13585
13687
|
)\d{4}
|
13586
13688
|
</nationalNumberPattern>
|
@@ -13815,12 +13917,12 @@
|
|
13815
13917
|
<availableFormats>
|
13816
13918
|
<!-- Formatting from Ministry of Agriculture,
|
13817
13919
|
http://www.moa.gov.lr/content.php?sub=Email&?related=Contacts -->
|
13818
|
-
<numberFormat pattern="(
|
13819
|
-
<leadingDigits>
|
13920
|
+
<numberFormat pattern="(2\d)(\d{3})(\d{3})">
|
13921
|
+
<leadingDigits>2</leadingDigits>
|
13820
13922
|
<format>$1 $2 $3</format>
|
13821
13923
|
</numberFormat>
|
13822
|
-
<numberFormat pattern="(
|
13823
|
-
<leadingDigits>
|
13924
|
+
<numberFormat pattern="([79]\d{2})(\d{3})(\d{3})">
|
13925
|
+
<leadingDigits>[79]</leadingDigits>
|
13824
13926
|
<format>$1 $2 $3</format>
|
13825
13927
|
</numberFormat>
|
13826
13928
|
<numberFormat pattern="([4-6])(\d{3})(\d{3})">
|
@@ -13834,12 +13936,9 @@
|
|
13834
13936
|
</availableFormats>
|
13835
13937
|
<generalDesc>
|
13836
13938
|
<nationalNumberPattern>
|
13837
|
-
|
13838
|
-
|
13839
|
-
|
13840
|
-
7\d{1,2}|
|
13841
|
-
[38]\d{2}
|
13842
|
-
)\d{6}
|
13939
|
+
2\d{7}|
|
13940
|
+
[37-9]\d{8}|
|
13941
|
+
[45]\d{6}
|
13843
13942
|
</nationalNumberPattern>
|
13844
13943
|
<possibleNumberPattern>\d{7,9}</possibleNumberPattern>
|
13845
13944
|
</generalDesc>
|
@@ -13849,34 +13948,38 @@
|
|
13849
13948
|
<exampleNumber>21234567</exampleNumber>
|
13850
13949
|
</fixedLine>
|
13851
13950
|
<mobile>
|
13852
|
-
<!--
|
13853
|
-
|
13854
|
-
|
13951
|
+
<!-- West Africa Telecom seems to be a mobile company from their website. Adding Atlantic
|
13952
|
+
Wireless from the document, even though from online news reports it is not clear they
|
13953
|
+
are still operating. -->
|
13855
13954
|
<nationalNumberPattern>
|
13856
13955
|
(?:
|
13956
|
+
330\d|
|
13857
13957
|
4[67]|
|
13858
13958
|
5\d|
|
13859
|
-
|
13860
|
-
|
13861
|
-
|
13959
|
+
77\d{2}|
|
13960
|
+
88\d{2}|
|
13961
|
+
994\d
|
13862
13962
|
)\d{5}
|
13863
13963
|
</nationalNumberPattern>
|
13864
|
-
<exampleNumber>
|
13964
|
+
<exampleNumber>770123456</exampleNumber>
|
13865
13965
|
</mobile>
|
13866
13966
|
<premiumRate>
|
13867
|
-
<!--
|
13868
|
-
|
13869
|
-
|
13870
|
-
|
13871
|
-
at the moment, we decided to leave the (90) range unchanged for now. -->
|
13872
|
-
<nationalNumberPattern>90\d{6}</nationalNumberPattern>
|
13873
|
-
<possibleNumberPattern>\d{8}</possibleNumberPattern>
|
13874
|
-
<exampleNumber>90123456</exampleNumber>
|
13967
|
+
<!-- Telelinks and Interactive media service are listed under premium rate. -->
|
13968
|
+
<nationalNumberPattern>90[03]\d{6}</nationalNumberPattern>
|
13969
|
+
<possibleNumberPattern>\d{9}</possibleNumberPattern>
|
13970
|
+
<exampleNumber>900123456</exampleNumber>
|
13875
13971
|
</premiumRate>
|
13876
13972
|
<voip>
|
13877
13973
|
<!-- The plan lists the following range as being assigned to TEMAS. On their homepage they
|
13878
|
-
say they are involved in the VoIP sector.
|
13879
|
-
|
13974
|
+
say they are involved in the VoIP sector. Adding WASSCOM and Atlantic Realty &
|
13975
|
+
Investment Corporation here as well; no numbers can be found online, nor company
|
13976
|
+
information. -->
|
13977
|
+
<nationalNumberPattern>
|
13978
|
+
332(?:
|
13979
|
+
0[02]|
|
13980
|
+
5\d
|
13981
|
+
)\d{4}
|
13982
|
+
</nationalNumberPattern>
|
13880
13983
|
<possibleNumberPattern>\d{9}</possibleNumberPattern>
|
13881
13984
|
<exampleNumber>332001234</exampleNumber>
|
13882
13985
|
</voip>
|
@@ -15623,7 +15726,7 @@
|
|
15623
15726
|
[013568]\d|
|
15624
15727
|
2[4-7]
|
15625
15728
|
)|
|
15626
|
-
5(
|
15729
|
+
5(?:
|
15627
15730
|
44\d|
|
15628
15731
|
471
|
15629
15732
|
)|
|
@@ -16129,7 +16232,7 @@
|
|
16129
16232
|
<numberFormat pattern="([28]\d)(\d{3})(\d{3,4})">
|
16130
16233
|
<leadingDigits>
|
16131
16234
|
2|
|
16132
|
-
8[
|
16235
|
+
8[2-7]
|
16133
16236
|
</leadingDigits>
|
16134
16237
|
<format>$1 $2 $3</format>
|
16135
16238
|
</numberFormat>
|
@@ -16155,7 +16258,7 @@
|
|
16155
16258
|
<exampleNumber>21123456</exampleNumber>
|
16156
16259
|
</fixedLine>
|
16157
16260
|
<mobile>
|
16158
|
-
<nationalNumberPattern>8[
|
16261
|
+
<nationalNumberPattern>8[23467]\d{7}</nationalNumberPattern>
|
16159
16262
|
<possibleNumberPattern>\d{9}</possibleNumberPattern>
|
16160
16263
|
<exampleNumber>821234567</exampleNumber>
|
16161
16264
|
</mobile>
|
@@ -16309,7 +16412,7 @@
|
|
16309
16412
|
<voip>
|
16310
16413
|
<!-- Including virtual telephone and VOIP services. -->
|
16311
16414
|
<nationalNumberPattern>
|
16312
|
-
8(
|
16415
|
+
8(?:
|
16313
16416
|
3\d{2}|
|
16314
16417
|
86
|
16315
16418
|
)\d{5}
|
@@ -16412,12 +16515,12 @@
|
|
16412
16515
|
<exampleNumber>20201234</exampleNumber>
|
16413
16516
|
</fixedLine>
|
16414
16517
|
<mobile>
|
16415
|
-
<!-- Added 90, 91, 92, 97, 98 & 99 from online data. Airtel have confirmed that they use the
|
16416
|
-
89 and 97 prefixes, and Orange use 92. -->
|
16518
|
+
<!-- Added 90, 91, 92, 95, 97, 98 & 99 from online data. Airtel have confirmed that they use the
|
16519
|
+
89 and 97 prefixes, and Orange use 92. MOOV started using 95 in Jan 2014. -->
|
16417
16520
|
<nationalNumberPattern>
|
16418
16521
|
(?:
|
16419
16522
|
89|
|
16420
|
-
9
|
16523
|
+
9\d
|
16421
16524
|
)\d{6}
|
16422
16525
|
</nationalNumberPattern>
|
16423
16526
|
<exampleNumber>93123456</exampleNumber>
|
@@ -17499,8 +17602,7 @@
|
|
17499
17602
|
<mobile>
|
17500
17603
|
<nationalNumberPattern>
|
17501
17604
|
(?:
|
17502
|
-
[
|
17503
|
-
3[0-79]\d|
|
17605
|
+
[237]\d{2}|
|
17504
17606
|
411|
|
17505
17607
|
89\d{3}
|
17506
17608
|
)\d{3}
|
@@ -18071,17 +18173,9 @@
|
|
18071
18173
|
</leadingDigits>
|
18072
18174
|
<format>$1 $2 $3 $4</format>
|
18073
18175
|
</numberFormat>
|
18074
|
-
<numberFormat pattern="(\d{2})(\d{4
|
18075
|
-
|
18076
|
-
<
|
18077
|
-
[124]|
|
18078
|
-
3[2-4]|
|
18079
|
-
5[24-689]|
|
18080
|
-
6[1-3578]|
|
18081
|
-
7[14-7]|
|
18082
|
-
8[1-7]
|
18083
|
-
</leadingDigits>
|
18084
|
-
<format>$1 $2</format>
|
18176
|
+
<numberFormat pattern="(\d{2})(\d{1})(\d{4})">
|
18177
|
+
<leadingDigits>[12]2</leadingDigits>
|
18178
|
+
<format>$1 $2 $3</format>
|
18085
18179
|
</numberFormat>
|
18086
18180
|
<!-- We are formatting 70 numbers as per mobile numbers, based on information from some
|
18087
18181
|
Poles that this is more usual. -->
|
@@ -18107,14 +18201,16 @@
|
|
18107
18201
|
</availableFormats>
|
18108
18202
|
<generalDesc>
|
18109
18203
|
<nationalNumberPattern>
|
18110
|
-
[
|
18111
|
-
9\d{8}|
|
18112
|
-
|
18204
|
+
[12]\d{6,8}|
|
18205
|
+
[3-57-9]\d{8}|
|
18206
|
+
6\d{5,8}
|
18113
18207
|
</nationalNumberPattern>
|
18114
18208
|
<possibleNumberPattern>\d{6,9}</possibleNumberPattern>
|
18115
18209
|
</generalDesc>
|
18116
18210
|
<fixedLine>
|
18117
|
-
<!--
|
18211
|
+
<!-- The plan says all geographical numbers are 9 digits; but in at least Warsaw (22) and
|
18212
|
+
Krakow (12) we have found internationally diallable numbers that are 7 digits instead,
|
18213
|
+
so we support those too. -->
|
18118
18214
|
<nationalNumberPattern>
|
18119
18215
|
(?:
|
18120
18216
|
1[2-8]|
|
@@ -18123,14 +18219,11 @@
|
|
18123
18219
|
4[1-468]|
|
18124
18220
|
5[24-689]|
|
18125
18221
|
6[1-3578]|
|
18126
|
-
7[14-
|
18127
|
-
8[1-
|
18128
|
-
)\d{5,7}|
|
18129
|
-
77\d{4,7}|
|
18130
|
-
(?:
|
18131
|
-
89|
|
18222
|
+
7[14-7]|
|
18223
|
+
8[1-79]|
|
18132
18224
|
9[145]
|
18133
|
-
)\d{7}
|
18225
|
+
)\d{7}|
|
18226
|
+
[12]2\d{5}
|
18134
18227
|
</nationalNumberPattern>
|
18135
18228
|
<exampleNumber>123456789</exampleNumber>
|
18136
18229
|
</fixedLine>
|
@@ -18147,8 +18240,8 @@
|
|
18147
18240
|
<exampleNumber>512345678</exampleNumber>
|
18148
18241
|
</mobile>
|
18149
18242
|
<pager>
|
18150
|
-
<nationalNumberPattern>
|
18151
|
-
<exampleNumber>
|
18243
|
+
<nationalNumberPattern>64\d{4,7}</nationalNumberPattern>
|
18244
|
+
<exampleNumber>641234567</exampleNumber>
|
18152
18245
|
</pager>
|
18153
18246
|
<tollFree>
|
18154
18247
|
<nationalNumberPattern>800\d{6}</nationalNumberPattern>
|
@@ -20778,9 +20871,11 @@
|
|
20778
20871
|
<exampleNumber>1100</exampleNumber>
|
20779
20872
|
</noInternationalDialling>
|
20780
20873
|
<fixedLine>
|
20874
|
+
<!-- Numbers online have been found that start with 20, despite the ITU doc not covering
|
20875
|
+
these. -->
|
20781
20876
|
<nationalNumberPattern>
|
20782
20877
|
(?:
|
20783
|
-
2
|
20878
|
+
2\d|
|
20784
20879
|
3[2-9]|
|
20785
20880
|
4[2-5]|
|
20786
20881
|
5[2-6]|
|
@@ -20808,8 +20903,8 @@
|
|
20808
20903
|
</premiumRate>
|
20809
20904
|
<voip>
|
20810
20905
|
<!-- The ITU document says that the 89 prefix is also VOIP but there are lots of numbers
|
20811
|
-
online to suggest they are actually used as mobile numbers -->
|
20812
|
-
<nationalNumberPattern>
|
20906
|
+
online to suggest they are actually used as mobile numbers. -->
|
20907
|
+
<nationalNumberPattern>6[08]\d{7}</nationalNumberPattern>
|
20813
20908
|
<possibleNumberPattern>\d{9}</possibleNumberPattern>
|
20814
20909
|
<exampleNumber>601234567</exampleNumber>
|
20815
20910
|
</voip>
|
@@ -21407,8 +21502,8 @@
|
|
21407
21502
|
<availableFormats>
|
21408
21503
|
<numberFormat pattern="([2-8])(\d{3,4})(\d{4})">
|
21409
21504
|
<leadingDigits>
|
21410
|
-
[2-
|
21411
|
-
|
21505
|
+
[2-6]|
|
21506
|
+
[78][1-9]
|
21412
21507
|
</leadingDigits>
|
21413
21508
|
<format>$1 $2 $3</format>
|
21414
21509
|
</numberFormat>
|
@@ -21419,10 +21514,17 @@
|
|
21419
21514
|
</leadingDigits>
|
21420
21515
|
<format>$1 $2 $3</format>
|
21421
21516
|
</numberFormat>
|
21517
|
+
<numberFormat pattern="(70)(\d{4})(\d{4})">
|
21518
|
+
<leadingDigits>70</leadingDigits>
|
21519
|
+
<format>$1 $2 $3</format>
|
21520
|
+
</numberFormat>
|
21422
21521
|
</availableFormats>
|
21423
21522
|
<generalDesc>
|
21424
|
-
<nationalNumberPattern>
|
21425
|
-
|
21523
|
+
<nationalNumberPattern>
|
21524
|
+
[2-689]\d{7,8}|
|
21525
|
+
7\d{7,9}
|
21526
|
+
</nationalNumberPattern>
|
21527
|
+
<possibleNumberPattern>\d{8,10}</possibleNumberPattern>
|
21426
21528
|
</generalDesc>
|
21427
21529
|
<fixedLine>
|
21428
21530
|
<nationalNumberPattern>[2-8]\d{7,8}</nationalNumberPattern>
|
@@ -21444,6 +21546,12 @@
|
|
21444
21546
|
<possibleNumberPattern>\d{9}</possibleNumberPattern>
|
21445
21547
|
<exampleNumber>900123456</exampleNumber>
|
21446
21548
|
</premiumRate>
|
21549
|
+
<!-- http://www.chief.com.tw/telecom_eng/front/bin/ptlist.phtml?Category=107 -->
|
21550
|
+
<voip>
|
21551
|
+
<nationalNumberPattern>70\d{8}</nationalNumberPattern>
|
21552
|
+
<possibleNumberPattern>\d{10}</possibleNumberPattern>
|
21553
|
+
<exampleNumber>7012345678</exampleNumber>
|
21554
|
+
</voip>
|
21447
21555
|
</territory>
|
21448
21556
|
|
21449
21557
|
<!-- Tanzania -->
|
@@ -22266,7 +22374,7 @@
|
|
22266
22374
|
7[079]
|
22267
22375
|
)
|
22268
22376
|
)|
|
22269
|
-
9(
|
22377
|
+
9(?:
|
22270
22378
|
2(?:
|
22271
22379
|
1[1267]|
|
22272
22380
|
5\d|
|
@@ -22448,8 +22556,8 @@
|
|
22448
22556
|
<mobile>
|
22449
22557
|
<!-- We have no information on mobile numbers from the Vatican. It is probable that they use
|
22450
22558
|
Italian mobile contracts. -->
|
22451
|
-
<nationalNumberPattern>
|
22452
|
-
<possibleNumberPattern>
|
22559
|
+
<nationalNumberPattern>NA</nationalNumberPattern>
|
22560
|
+
<possibleNumberPattern>NA</possibleNumberPattern>
|
22453
22561
|
</mobile>
|
22454
22562
|
<!-- No information exists about other types of numbers. -->
|
22455
22563
|
</territory>
|
@@ -22463,6 +22571,8 @@
|
|
22463
22571
|
<nationalNumberPattern>[5789]\d{9}</nationalNumberPattern>
|
22464
22572
|
<possibleNumberPattern>\d{7}(?:\d{3})?</possibleNumberPattern>
|
22465
22573
|
</generalDesc>
|
22574
|
+
<!-- For 570, 571 and 572 prefixes, we believe the ITU doc incorrectly listed them to be under
|
22575
|
+
area code 758, which should be 784. -->
|
22466
22576
|
<fixedLine>
|
22467
22577
|
<nationalNumberPattern>
|
22468
22578
|
784(?:
|
@@ -22475,10 +22585,13 @@
|
|
22475
22585
|
4(?:
|
22476
22586
|
38|
|
22477
22587
|
5[0-36-8]|
|
22478
|
-
8
|
22479
|
-
|
22588
|
+
8[0-8]
|
22589
|
+
)|
|
22590
|
+
5(?:
|
22591
|
+
55|
|
22592
|
+
7[0-2]|
|
22593
|
+
93
|
22480
22594
|
)|
|
22481
|
-
555|
|
22482
22595
|
638|
|
22483
22596
|
784
|
22484
22597
|
)\d{4}
|
@@ -22486,19 +22599,17 @@
|
|
22486
22599
|
<exampleNumber>7842661234</exampleNumber>
|
22487
22600
|
</fixedLine>
|
22488
22601
|
<mobile>
|
22489
|
-
<!-- Adding 784 433 and 784 534 since online numbers can be found with these prefixes, and
|
22490
|
-
the latter seems, according to some online sources, to be assigned to Digicell. -->
|
22491
22602
|
<nationalNumberPattern>
|
22492
22603
|
784(?:
|
22493
22604
|
4(?:
|
22494
22605
|
3[0-4]|
|
22495
22606
|
5[45]|
|
22496
|
-
|
22607
|
+
89|
|
22608
|
+
9[0-5]
|
22497
22609
|
)|
|
22498
22610
|
5(?:
|
22499
22611
|
2[6-9]|
|
22500
|
-
3[0-4]
|
22501
|
-
93
|
22612
|
+
3[0-4]
|
22502
22613
|
)
|
22503
22614
|
)\d{4}
|
22504
22615
|
</nationalNumberPattern>
|
data/data/phone_data.dat
CHANGED
Binary file
|
data/lib/phonelib/core.rb
CHANGED
data/lib/phonelib/phone.rb
CHANGED
@@ -37,6 +37,11 @@ module Phonelib
|
|
37
37
|
@data.flat_map { |iso2, data| data[:valid] }.uniq
|
38
38
|
end
|
39
39
|
|
40
|
+
# Returns all possible types that matched possible patterns
|
41
|
+
def possible_types
|
42
|
+
@data.flat_map { |iso2, data| data[:possible] }.uniq
|
43
|
+
end
|
44
|
+
|
40
45
|
# Returns first phone type that matched
|
41
46
|
def type
|
42
47
|
types.first
|
@@ -17,7 +17,7 @@ module Phonelib
|
|
17
17
|
|
18
18
|
result = try_to_parse_single_country(phone, country)
|
19
19
|
# if previous parsing failed, trying for all countries
|
20
|
-
if result.nil? || result.values.first[:valid].empty?
|
20
|
+
if result.nil? || result.empty? || result.values.first[:valid].empty?
|
21
21
|
result = detect_and_parse phone
|
22
22
|
end
|
23
23
|
result
|
data/lib/phonelib/version.rb
CHANGED
@@ -25,16 +25,43 @@
|
|
25
25
|
# attr_accessible :number
|
26
26
|
# validates :number, phone: { allow_blank: true }
|
27
27
|
# end
|
28
|
+
#
|
29
|
+
# Validates that attribute is a valid phone number of specified type(s).
|
30
|
+
# It is also possible to check that attribute is a possible number of specified
|
31
|
+
# type(s). Symbol or array accepted.
|
32
|
+
#
|
33
|
+
# class Phone < ActiveRecord::Base
|
34
|
+
# attr_accessible :number, :mobile
|
35
|
+
# validates :number, phone: { types: [:mobile, :fixed], allow_blank: true }
|
36
|
+
# validates :mobile, phone: { possible: true, types: :mobile }
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
|
28
40
|
class PhoneValidator < ActiveModel::EachValidator
|
29
41
|
# Include all core methods
|
30
42
|
include Phonelib::Core
|
31
43
|
|
32
44
|
# Validation method
|
33
45
|
def validate_each(record, attribute, value)
|
46
|
+
return if options[:allow_blank] && value.blank?
|
47
|
+
|
34
48
|
phone = parse(value)
|
35
|
-
|
36
|
-
|
49
|
+
if options[:types]
|
50
|
+
method = options[:possible] ? :possible_types : :types
|
51
|
+
valid = (phone.send(method) & types).size > 0
|
52
|
+
else
|
53
|
+
method = options[:possible] ? :possible? : :valid?
|
54
|
+
valid = phone.send(method)
|
55
|
+
end
|
37
56
|
|
38
57
|
record.errors.add(attribute, options[:message] || :invalid) unless valid
|
39
58
|
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def types
|
63
|
+
types = options[:types].is_a?(Array) ? options[:types] : [options[:types]]
|
64
|
+
types.map &:to_sym
|
65
|
+
end
|
66
|
+
|
40
67
|
end
|
metadata
CHANGED
@@ -1,74 +1,82 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phonelib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Vadim Senderovich
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-05-21 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rake
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- - '>='
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '0'
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- - '>='
|
27
|
+
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '0'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: nokogiri
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- - '>='
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- - '>='
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: pry
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rspec
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- - '>='
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0'
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- - '>='
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0'
|
69
|
-
description:
|
70
|
-
|
71
|
-
this gem. Gem uses its data file for validations and number formatting.
|
78
|
+
description: ! " Google libphonenumber library was taken as a basis for\n this
|
79
|
+
gem. Gem uses its data file for validations and number formatting.\n"
|
72
80
|
email:
|
73
81
|
- daddyzgm@gmail.com
|
74
82
|
executables: []
|
@@ -77,42 +85,47 @@ extra_rdoc_files: []
|
|
77
85
|
files:
|
78
86
|
- data/phone_data.dat
|
79
87
|
- data/PhoneNumberMetaData.xml
|
80
|
-
- lib/phonelib.rb
|
81
|
-
- lib/phonelib/version.rb
|
82
|
-
- lib/phonelib/phone_analyzer.rb
|
83
|
-
- lib/phonelib/phone.rb
|
84
|
-
- lib/phonelib/core.rb
|
85
88
|
- lib/validators/phone_validator.rb
|
86
89
|
- lib/tasks/phonelib_tasks.rake
|
90
|
+
- lib/phonelib/phone.rb
|
91
|
+
- lib/phonelib/core.rb
|
92
|
+
- lib/phonelib/version.rb
|
93
|
+
- lib/phonelib/phone_analyzer.rb
|
94
|
+
- lib/phonelib.rb
|
87
95
|
- MIT-LICENSE
|
88
96
|
- Rakefile
|
89
97
|
- README.rdoc
|
90
98
|
homepage: https://github.com/daddyz/phonelib
|
91
99
|
licenses:
|
92
100
|
- MIT
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
Phone types were changed from camel case to snake case!
|
97
|
-
Example: ":tollFree" changed to ":toll_free".
|
98
|
-
Please update your app in case you are checking types!
|
101
|
+
post_install_message: ! " IMPORTANT NOTICE!\n Phone types were changed from
|
102
|
+
camel case to snake case!\n Example: \":tollFree\" changed to \":toll_free\".\n
|
103
|
+
\ Please update your app in case you are checking types!\n"
|
99
104
|
rdoc_options: []
|
100
105
|
require_paths:
|
101
106
|
- lib
|
102
107
|
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
103
109
|
requirements:
|
104
|
-
- - '>='
|
110
|
+
- - ! '>='
|
105
111
|
- !ruby/object:Gem::Version
|
106
112
|
version: '0'
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
hash: -1226309370824333791
|
107
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
108
118
|
requirements:
|
109
|
-
- - '>='
|
119
|
+
- - ! '>='
|
110
120
|
- !ruby/object:Gem::Version
|
111
121
|
version: '0'
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
hash: -1226309370824333791
|
112
125
|
requirements: []
|
113
126
|
rubyforge_project:
|
114
|
-
rubygems_version:
|
127
|
+
rubygems_version: 1.8.23
|
115
128
|
signing_key:
|
116
|
-
specification_version:
|
129
|
+
specification_version: 3
|
117
130
|
summary: Gem validates phone numbers with Google libphonenumber database
|
118
131
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 29055d1498d5685ac059d21d2ab2fef9a6041a32
|
4
|
-
data.tar.gz: 8d5047983bdac17132ad444f953522b3271fe593
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: ac7f6c81df3e37071500ad19757b105b6937b87b6cae4d43d3ea944c85fc3f093dcad848c176ca00f59d33e2cd5ced6ece6d04e48f69aa3e2b5b044c632fb3a4
|
7
|
-
data.tar.gz: 0af44748bfe52bc18dfae1c36ee1f1de8870b04f318db8bc9a07a3c0c1dc1acf27653ed5aeaa3eacd0812c2a091787ee5f445bf7f16a8725f6eb9366e5d257a3
|