Not a duplicate of Making random phone number xxx-xxx-xxxx
My project uses python-phonenumbers and django-phonenumber-field for phone number validation. Within the project are vast lists of custom validation rules, for which naive approach like this will not be sufficient:
>>> 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
So, without resorting to a brute-force while loop that has no upper bound, and without introducing an upper bound for such trivial problems, what better ways are there to generate valid phone numbers accepted by the validator itself?
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
Project description
International phone number generation
This module was created exclusively for generating test data
Installation
Install using pip with
pip install phone-gen
Example
from phone_gen import PhoneNumber phone_number = PhoneNumber("GB") # ISO 3166-2 # or phone_number = PhoneNumber("GBR") # ISO 3166-3 # or phone_number = PhoneNumber("Great Britain") # Country name # Get a phone number number = phone_number.get_number() print(number) # +442908124840 # Get a country code country_code = phone_number.get_code() print(country_code) # 44 # Get a phone number without a country code number = phone_number.get_number(full=False) print(number) # 183782623 # Get a mobile phone number number = phone_number.get_mobile() print(number) # +447911899521 # Get a national phone number number = phone_number.get_national() print(number) # +442408055065
pytest fixture
import pytest from phone_gen import PhoneNumber @pytest.fixture def phone_number(): def wrap(code): return PhoneNumber(code).get_number() yield wrap def test_one(phone_number): number = phone_number("DE") ...
Using the CLI
usage: phone-gen [-h] [-v] [-n] country [country ...] International phone number generation positional arguments: country Country code or country name. Example: "GB" or "GBR" or "Great Britain" optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit -f, --not-full Get a phone number without a country code -m, --mobile Get mobile phone number -n, --national Get national phone number
Example
# Get a phone number $ phone-gen DE +49791774007056 $ phone-gen DEU +499968635 $ phone-gen Germany +49960335800 # Get a phone number without a country code $ phone-gen -f DE 66999511 $ phone-gen -f Germany 877595 # Get mobile phone number $ phone-gen -m DE +491601376066 # Get national phone number $ phone-gen -n DE +4940381
Resources
- Google’s libphonenumber
- Modified strgen library
Changelog
- CHANGELOG.md
Contributing
Contributions are very welcome.
How to build a version with libphonenumber below v8.12.3
Need Python 3.8 or more.
git pull https://github.com/tolstislon/phone-gen.git
cd phone-gen
pip install requests
python dev_tools/patterns_generator.py -t {Desired Tag}
python setup.py install
Download files
Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
0 / 0 / 0 Регистрация: 24.03.2021 Сообщений: 19 |
|
1 |
|
Телефонный номер15.05.2021, 22:15. Показов 14152. Ответов 9
На различных сайтах часто требуется ввести номер телефона в определённом формате. Напиши программу, которая будет преобразовывать российский номер телефона в формат +7(КОД)ЧЧЧ-ЧЧ-ЧЧ. Пример ввода: 89264557895
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
15.05.2021, 22:15 |
9 |
iSmokeJC Нарушитель 14073 / 8256 / 2491 Регистрация: 21.10.2017 Сообщений: 19,730 |
||||
15.05.2021, 22:27 |
2 |
|||
1 |
Zay 55 / 14 / 5 Регистрация: 08.08.2020 Сообщений: 210 |
||||
16.05.2021, 08:07 |
3 |
|||
1 |
0 / 0 / 0 Регистрация: 24.03.2021 Сообщений: 19 |
|
16.05.2021, 10:11 [ТС] |
4 |
Добавлено через 1 минуту
q1 = [str(i)for i in input(«Введите номер телефона: «)]
import re не работает, к сожалению Добавлено через 1 минуту
import re выдаёт ошибку ‘module’ object has no attribute ‘sub’ Добавлено через 46 секунд
q1 = [str(i)for i in input(«Введите номер телефона: «)] ошибок нет, но как правильный код не засчитывает
0 |
954 / 340 / 113 Регистрация: 04.08.2018 Сообщений: 2,534 |
|
16.05.2021, 10:42 |
5 |
kapurdok, проверил, работает.
0 |
Zay 55 / 14 / 5 Регистрация: 08.08.2020 Сообщений: 210 |
||||
16.05.2021, 11:26 |
6 |
|||
kapurdok, наверное надо сделать ещё проверку на неправильный ввод, т.е если введенная последовательность короче или длиннее необходимой Добавлено через 11 минут
1 |
1487 / 461 / 52 Регистрация: 10.04.2009 Сообщений: 7,904 |
|
16.05.2021, 11:33 |
7 |
по хорошему начинать нужно
0 |
0 / 0 / 0 Регистрация: 24.03.2021 Сообщений: 19 |
|
16.05.2021, 13:12 [ТС] |
8 |
q1 = [str(i)for i in input(«Введите номер телефона: «)] я нашёл одну деталь, из-за которой не проходил ответ. в задании написано «номер может начинаться на +7, 8 или 7», но при вводе номера с первым символом «7», например «79264557895» выводит «7(926)455-78-95» БЕЗ плюса в начале, с «8» или «+7» в начале всё хорошо
0 |
Zay 55 / 14 / 5 Регистрация: 08.08.2020 Сообщений: 210 |
||||
16.05.2021, 13:22 |
9 |
|||
Решение3 и 8 строки
1 |
0 / 0 / 0 Регистрация: 24.03.2021 Сообщений: 19 |
|
16.05.2021, 13:24 [ТС] |
10 |
спасибо! всё работает!
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
16.05.2021, 13:24 |
Помогаю со студенческими работами здесь Телефонный справочник Столкнулся с некоторыми проблемами реализации телефонного справочника. Условия:
Требования к программе:… Написать программу — телефонный справочник (на основании словарей)
Образует ли подстрока, начинающаяся с символа номер m и заканчивающаяся символом номер n, число 666? Написать программу, которая вычисляет номер подъезда и номер этажа по номеру квартиры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 10 |