国际电话号码验证

Naf*_*Kay 2 python validation

我需要在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)
Run Code Online (Sandbox Code Playgroud)

我的主要问题是我不知道国际电话号码是如何工作的.我假设它们只是10位数字,\d+前面有国家代码.这是真的?

Mic*_*man 5

E.164号码最多可以是十五位数,并且您不应期望超过1-3位数的国家代码,它们将适合任何特定形式.当然有很多国家不是XXX-XXX-XXXX.在我看来,你有三个选择:

  1. 精心为每个国家/地区代码创建数字格式的数据库.然后定期检查每个国家/地区的更新.(编辑:看起来谷歌已经这样做了,所以如果你相信他们和Python搬运工,以保持libphonenumber的正确和最新,并且不介意每次有变化时升级这个库,这可能对你有用. )
  2. 消除所提供电话号码中的所有分隔符,并将其格式化,无间距:+12128675309
  3. 在用户提供数字时格式化数字,而不是错误地重新格式化数字.