* Update tests to use current version of canonical data (v1.2.0). These tests require validation of the area and exchange codes, which is already mentioned in README.md - the first digit of each must be between 2 and 9 * Update example code to pass new tests
39 lines
893 B
Python
39 lines
893 B
Python
import re
|
|
|
|
|
|
class Phone(object):
|
|
def __init__(self, number):
|
|
self.number = self._clean(number)
|
|
|
|
def area_code(self):
|
|
return self.number[:3]
|
|
|
|
def exchange_code(self):
|
|
return self.number[3:6]
|
|
|
|
def subscriber_number(self):
|
|
return self.number[-4:]
|
|
|
|
def pretty(self):
|
|
return "(%s) %s-%s" % (
|
|
self.area_code(),
|
|
self.exchange_code(),
|
|
self.subscriber_number()
|
|
)
|
|
|
|
def _clean(self, number):
|
|
return self._normalize(
|
|
re.sub(r'[^\d]', '', number)
|
|
)
|
|
|
|
def _normalize(self, number):
|
|
if len(number) == 10 or len(number) == 11 and number.startswith('1'):
|
|
valid = number[-10] in "23456789" and number[-7] in "23456789"
|
|
else:
|
|
valid = False
|
|
|
|
if valid:
|
|
return number[-10:]
|
|
else:
|
|
return '0' * 10
|