【发布时间】:2012-01-14 11:01:49
【问题描述】:
我需要在 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+。这是真的?
【问题讨论】:
-
@TK Kocheran:关于 SO 的其他问题是否满足您的需求。在这种情况下,您可以删除此问题。
-
我认为事情不会这么简单。看看this page,我发现有几个国家不适合 10 位格式,尽管它很常见。您还必须担心无效的 10 位数字。例如,号码 555.XXX.XXXX 在美国无效。 911.XXX.XXXX 也是如此。这些因国家/地区而异。
-
Here's Google 手机库的 Python 端口。也许你可以使用它。
-
国际电话号码可以有任意长度。在德国,供应商会为同一城市的客户提供不同长度的数字。如果我的提供商将拨打的号码传输给我,我什至可以通过在分配的号码上附加更多数字来创建新号码,并为它们配置我自己的 pbx。
标签: python validation