Class: MobileNumberNormalizer
- Inherits:
-
Object
- Object
- MobileNumberNormalizer
- Defined in:
- lib/mobile_number_normalizer.rb,
lib/mobile_number_normalizer/version.rb
Overview
Normalize Mobile Numbers
Constant Summary collapse
- MIN_MOBILE_NUMBER_LENGTH =
Minimal Length of a Mobile Number 0049 => 4 177 => 3 xxxxxx => minimal 4
11
- VERSION =
"0.1.2"
- @@valid_area_codes =
Array of String of International Area Codes
[ '001', '001809', '0020', '00212', '00213', '00216', '00218', '00220', '00221', '00222', '00223', '00224', '00225', '00226', '00227', '00228', '00229', '00230', '00231', '00232', '00233', '00234', '00235', '00236', '00237', '00238', '00239', '00240', '00241', '00242', '00243', '00244', '00245', '00247', '00248', '00249', '00250', '00251', '00252', '00253', '00254', '00255', '00256', '00257', '00258', '00260', '00261', '00262', '00263', '00264', '00265', '00266', '00267', '00268', '00269', '0027', '00290', '00291', '00297', '00298', '00299', '0030', '0031', '0032', '0033', '0034', '00350', '00351', '00352', '00353', '00354', '00355', '00356', '00357', '00358', '00359', '0036', '00370', '00371', '00372', '00373', '00376', '00378', '0038', '00385', '00387', '00389', '0039', '00396', '0040', '0041', '0042', '0043', '0044', '0045', '0046', '0047', '0048', '00500', '00501', '00502', '00503', '00504', '00505', '00506', '00507', '00508', '00509', '0051', '0052', '0053', '0054', '0055', '0056', '0057', '0058', '00590', '00591', '00592', '00593', '00594', '00595', '00596', '00597', '00598', '00599', '0060', '0061', '0062', '0063', '0064', '0065', '0066', '00670', '00671', '00673', '00674', '00675', '00676', '00677', '00678', '00679', '00680', '00682', '00684', '00685', '00686', '00687', '00689', '00691', '00692', '007', '0081', '0084', '00850', '00852', '00853', '00855', '00856', '0086', '00880', '00886', '0090', '0091', '0092', '0094', '0095', '00960', '00961', '00962', '00963', '00964', '00965', '00966', '00967', '00968', '00971', '00972', '00973', '00974', '00975', '00976', '00977', '0098', '00994' ]
Class Method Summary collapse
- .add_area_code(new_area_code) ⇒ Object
-
.clean_number(mobile_number) ⇒ String
Clean a mobile number.
-
.delete_invalid_numbers(mobile_number) ⇒ String
Deletes the number if it is invalid.
-
.get_number(number) ⇒ Object
Return the correct mobile number as Class.
-
.looks_like_a_mobile_number(number) ⇒ Boolean
Determinate if the number could be a mobile number.
-
.remove_superflouid_chars(mobile_number) ⇒ String
Removed support characters in numbers.
-
.replace_prefix(mobile_number) ⇒ String
Replace the different number prefix.
- .valid_area_codes ⇒ Object
- .valid_area_codes=(new_valid_area_codes) ⇒ Object
Instance Method Summary collapse
-
#clean_mobile_number ⇒ Object
Normalize mobile number.
-
#correct_typos_in_mobile_number ⇒ Object
Try to fix typos in the mobile number.
-
#filter_part ⇒ Object
Try to guess the right part of the mobile number.
-
#get_number ⇒ Object
Return the correct mobile number.
- #has_valid_area_code? ⇒ Boolean
-
#initialize(mobile_number) ⇒ MobileNumberNormalizer
constructor
A new instance of MobileNumberNormalizer.
-
#splits ⇒ Array
Split the number in uniq Parts.
Constructor Details
#initialize(mobile_number) ⇒ MobileNumberNormalizer
Returns a new instance of MobileNumberNormalizer.
59 60 61 |
# File 'lib/mobile_number_normalizer.rb', line 59 def initialize(mobile_number) @mobile_number = mobile_number end |
Class Method Details
.add_area_code(new_area_code) ⇒ Object
54 55 56 57 |
# File 'lib/mobile_number_normalizer.rb', line 54 def self.add_area_code(new_area_code) area_code = '00' + new_area_code.to_s.sub(/^[^1-9]*/, '') @@valid_area_codes << area_code unless @@valid_area_codes.include? area_code end |
.clean_number(mobile_number) ⇒ String
Clean a mobile number
157 158 159 160 161 162 163 164 165 |
# File 'lib/mobile_number_normalizer.rb', line 157 def self.clean_number mobile_number mobile_number.strip! mobile_number = replace_prefix mobile_number #puts mobile_number mobile_number = remove_superflouid_chars mobile_number #puts mobile_number mobile_number = "0049#{mobile_number[1..-1]}" if /^0[1-9]/ =~ mobile_number delete_invalid_numbers mobile_number end |
.delete_invalid_numbers(mobile_number) ⇒ String
Deletes the number if it is invalid
173 174 175 176 177 |
# File 'lib/mobile_number_normalizer.rb', line 173 def self.delete_invalid_numbers mobile_number mobile_number = "" unless mobile_number.length.between?(MIN_MOBILE_NUMBER_LENGTH, 20) mobile_number = "" if /^[^0]/ =~ mobile_number return mobile_number end |
.get_number(number) ⇒ Object
Return the correct mobile number as Class
67 68 69 70 |
# File 'lib/mobile_number_normalizer.rb', line 67 def self.get_number number number = new(number).get_number return number end |
.looks_like_a_mobile_number(number) ⇒ Boolean
Determinate if the number could be a mobile number
139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/mobile_number_normalizer.rb', line 139 def self.looks_like_a_mobile_number number if !number.blank? #puts "Dirty Part: #{number}" clean_number = MobileNumberNormalizer.clean_number(number) #puts "Clean Part: #{number}: #{clean_number}" if !clean_number.blank? && clean_number.length > MIN_MOBILE_NUMBER_LENGTH #puts "Nice Part: #{number}" return /^00491/ =~ clean_number end end end |
.remove_superflouid_chars(mobile_number) ⇒ String
Removed support characters in numbers
207 208 209 210 |
# File 'lib/mobile_number_normalizer.rb', line 207 def self.remove_superflouid_chars mobile_number mobile_number.gsub!(/[\(\)\.:´+*^&]/,'') mobile_number.gsub! /[^0-9]*/, '' end |
.replace_prefix(mobile_number) ⇒ String
Replace the different number prefix
190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/mobile_number_normalizer.rb', line 190 def self.replace_prefix mobile_number mobile_number = "0#{mobile_number}" if /^1/ =~ mobile_number mobile_number.sub!(/^49/, '0049') mobile_number.sub!(/\+/, '00') valid_area_codes.each do |area_code| if mobile_number.start_with?(area_code[2..-1]) mobile_number = "00#{mobile_number}" end end return mobile_number end |
.valid_area_codes ⇒ Object
50 51 52 |
# File 'lib/mobile_number_normalizer.rb', line 50 def self.valid_area_codes @@valid_area_codes end |
.valid_area_codes=(new_valid_area_codes) ⇒ Object
46 47 48 |
# File 'lib/mobile_number_normalizer.rb', line 46 def self.valid_area_codes=(new_valid_area_codes) @@valid_area_codes = new_valid_area_codes end |
Instance Method Details
#clean_mobile_number ⇒ Object
Normalize mobile number
93 94 95 |
# File 'lib/mobile_number_normalizer.rb', line 93 def clean_mobile_number @mobile_number = MobileNumberNormalizer.clean_number @mobile_number end |
#correct_typos_in_mobile_number ⇒ Object
Try to fix typos in the mobile number
101 102 103 104 105 106 107 |
# File 'lib/mobile_number_normalizer.rb', line 101 def correct_typos_in_mobile_number @mobile_number.strip! @mobile_number.gsub!(/[ßo]/, '0') @mobile_number.gsub!(/[\(\)\.]/, '') @mobile_number.gsub!(/\s(\d{2})\s/, '\1') @mobile_number.gsub!(/[a-zA-Z\-]/, '') end |
#filter_part ⇒ Object
Try to guess the right part of the mobile number
113 114 115 116 117 118 119 120 121 |
# File 'lib/mobile_number_normalizer.rb', line 113 def filter_part good_guess = nil #puts splits splits.each do |split| good_guess = split if MobileNumberNormalizer.looks_like_a_mobile_number(split.strip) end #puts "Guess: #{good_guess}" @mobile_number = good_guess unless good_guess.blank? end |
#get_number ⇒ Object
Return the correct mobile number
76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/mobile_number_normalizer.rb', line 76 def get_number org_num = @mobile_number #puts "Full Number: #{@mobile_number}" correct_typos_in_mobile_number #puts "Typofix: #{@mobile_number}" filter_part #puts "After Filter: #{@mobile_number}" clean_mobile_number #puts "After clean: #{@mobile_number}" mobile_number = "" unless has_valid_area_code? return @mobile_number end |
#has_valid_area_code? ⇒ Boolean
179 180 181 182 183 |
# File 'lib/mobile_number_normalizer.rb', line 179 def has_valid_area_code? self.class.valid_area_codes.any? do |area_code| Regexp.new("^#{area_code}") =~ @mobile_number end end |
#splits ⇒ Array
Split the number in uniq Parts
128 129 130 131 |
# File 'lib/mobile_number_normalizer.rb', line 128 def splits split_chars = [/\s/,/\s{2}/, ':', ',', '/', '//', ')', '.', ' 0 ', ';'] return split_chars.map { |split_char| @mobile_number.split(split_char) }.flatten.uniq end |