Проверка записи номера телефона и электроной почты
Написать функцию, которая на вход принимает строку, а на выход выдает булево значение (True или False), которое истинно, если полученная строка соответствует номеру телефона или адресу электронной почты.
import re
def check_string(string):
if re.match(r'[\+7|8]?.?(\d{3}).?(\d{3}).?(\d{2}).?(\d{2})',string) and len(string) <=11 or re.match(r'^\w+[\.]?(\w+)*\@(\w+\.)*\w{2,}$',string):
return(bool(string))
else: return(False)
print(check_string(input()))
Вот код который справляется с почтой, но почти справляется с телефонами. Например если телефон записать с 9 (9231231212), то его длина должна быть 10 цифр, а если с 8 (89231231212), то 11, с +7 соответственно длина 12. Но если написать номер с 9 и он будет длиной 11 символов, то номер оказывается верным, а должен выводится Folse. Как ограничить длину номера, относительно его начала? (помимо знака + в телефоне могут быть скобки и тире)
Вот список номеров которые должны быть правильные: +79160000000; 9160000000; 8(916)000-00-00; +7(916)000-00-00; (916)000-00-00; 8 (916) 000-00-00; +7 (916) 000-00-00; (916) 000-00-00; 8(916)0000000; +7(916)0000000; (916)0000000; 8-916-000-00-00; +7-916-000-00-00; 916-000-00-00; номер -7 (910) 000-10-10 должен быть неправильный
Ответы (2 шт):
Посмотрите, такой результат нужен?
import re
phones_str = str('+79160000000; 9160000000; 8(916)000-00-00; +7(916)000-00-00; (916)000-00-00; '
'8 (916) 000-00-00; +7 (916) 000-00-00; '
'(916) 000-00-00; 8(916)0000000; '
'+7(916)0000000; (916)0000000; 8-916-000-00-00; +7-916-000-00-00; 916-000-00-00')
phones = re.split(r' *; *', phones_str, flags=re.M)
def check_phone(num: str):
clear_phone = re.sub(r'\D', '', num)
result = re.match(r'^[78]?\d{10}$', clear_phone)
print(bool(result))
for phone in phones:
check_phone(phone)
Вот код к решению этой задачи.
import re
def check_string(string):
phone = re.sub(r'\b\D', '', string)
clear_phone = re.sub(r'[\ \(]?', '', phone)
if re.findall(r'^[\+7|8]*?\d{10}$', clear_phone) or re.match(r'^\w+[\.]?(\w+)*\@(\w+\.)*\w{2,}$',string):
return(bool(string))
else: return(False)
print(check_string(input()))
Сначала очищаем номер от всех знаков препинания, кроме первого знака, после убираем лишние пробелы и скобки, если номер ими разделён, дальше делаем по шаблону начиная с +7 или 8