2013-08-01 11:42:00 -05:00
|
|
|
import re
|
|
|
|
|
|
2014-02-22 10:55:33 +08:00
|
|
|
|
2013-08-01 11:42:00 -05:00
|
|
|
class Phone(object):
|
|
|
|
|
def __init__(self, number):
|
|
|
|
|
self.number = self._clean(number)
|
2017-11-05 17:18:39 -06:00
|
|
|
self.area_code = self.number[:3]
|
|
|
|
|
self.exchange_code = self.number[3:6]
|
|
|
|
|
self.subscriber_number = self.number[-4:]
|
2013-08-01 11:42:00 -05:00
|
|
|
|
|
|
|
|
def pretty(self):
|
2017-11-23 09:47:33 +00:00
|
|
|
return "({}) {}-{}".format(
|
2017-11-05 17:18:39 -06:00
|
|
|
self.area_code,
|
|
|
|
|
self.exchange_code,
|
2017-11-23 09:47:33 +00:00
|
|
|
self.subscriber_number,
|
2013-08-01 11:42:00 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def _clean(self, number):
|
|
|
|
|
return self._normalize(
|
2017-11-23 09:47:33 +00:00
|
|
|
re.sub(r'[^\d]', '', number),
|
2013-08-01 11:42:00 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def _normalize(self, number):
|
2017-09-23 15:16:03 +01:00
|
|
|
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
|
2013-08-01 11:42:00 -05:00
|
|
|
|
|
|
|
|
if valid:
|
|
|
|
|
return number[-10:]
|
|
|
|
|
else:
|
2017-12-12 18:11:43 +00:00
|
|
|
raise ValueError("{} is not a valid phone number".format(number))
|