我需要在 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+。这是真的?

最佳答案

E.164 数字最多可以有 15 位数字,您不应期望超出 1-3 位数字的国家/地区代码它们将适合任何特定形式。当然,有很多国家不是 XXX-XXX-XXXX。在我看来,您有三个选择:

  • 煞费苦心地为每个国家/地区代码创建一个数字格式数据库。然后定期检查每个国家/地区是否有更新。 (编辑:它看起来像谷歌 already does this ,所以如果你相信他们和 Python 搬运工保持 libphonenumber 正确和最新,并且不介意每次有变化时升级这个库,这可能对你有用。)
  • 删除所提供电话号码中的所有分隔符,并对其进行格式化,不留任何空格:+12128675309
  • 按照用户提供的方式格式化数字,而不是自己错误地重新格式化。
  • 关于python - 国际电话号码验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8406765/

    10-12 20:20