我需要在Python中对所有美国和国际电话号码进行非常基本的电话号码验证和格式化。这是我到目前为止所做的:
import re
def validate(number):
number = re.compile(r'[^0-9]').sub('', number)
if len(number) == 10:
# ten-digit number, great
return number
elif len(number) == 7:
# 7-digit number, should include area code
raise ValidationError("INCLUDE YOUR AREA CODE OR ELSE.")
else:
# I have no clue what to do here
def format(number):
if len(number) == 10:
# basically return XXX-XXX-XXXX
return re.compile(r'^(\d{3})(\d{3})(\d{4})$').sub('$1-$2-$3', number)
else:
# basically return +XXX-XXX-XXX-XXXX
return re.compile(r'^(\d+)(\d{3})(\d{3})(\d{4})$').sub('+$1-$2-$3-$4', number)
我的主要问题是我不知道国际电话号码是如何运作的。我假设它们只是10位数字,前面有国家代码\d+
。这是真的?
答案 0 :(得分:5)
E.164个数字最多可以是十五位数,并且您不应期望超出1-3位数的国家/地区代码,它们将适合任何特定形式。当然有很多国家不是XXX-XXX-XXXX。在我看来,你有三个选择:
答案 1 :(得分:0)
我忽略了格式,如空格和破折号在哪里。 但这是我用来验证这些数字的正则表达式函数:
def is_valid_phone(phone):
return re.match(r'(\+[0-9]+\s*)?(\([0-9]+\))?[\s0-9\-]+[0-9]+', phone)