【发布时间】:2016-04-07 14:41:18
【问题描述】:
不是Making random phone number xxx-xxx-xxxx的重复项
我的项目使用python-phonenumbers 和django-phonenumber-field 进行电话号码验证。项目中有大量的自定义验证规则列表,像这样幼稚的方法是不够的:
>>> import functools
>>> import random
>>> a = functools.partial(random.randint, 0, 9)
>>> gen = lambda: "+{}-{}{}{}-{}{}{}-{}{}{}{}".format(a(), a(), a(), a(), a(), a(), a(), a(), a(), a(), a())
>>> gen()
'+2-758-702-0180' # Obviously wrong
>>> gen()
'+1-911-555-0180' # Obviously wrong, it has 911 in it
那么,如果不使用没有上限的蛮力 while 循环,也不为此类琐碎的问题引入上限,那么有什么更好的方法来生成验证器本身接受的有效电话号码?
from phonenumber_field.validators import validate_international_phonenumber
from django.core.exceptions import ValidationError
def generate_valid_number():
while True: # While loops are not desired, even with an upper bound!
try:
number = gen()
validate_international_phonenumber(number)
return number
except ValidationError:
pass
【问题讨论】:
-
@PeterWood 这是用于测试的。有点虚假是好的。
标签: python phone-number