diff --git a/README.md b/README.md index 41ed52f9..1959bf8a 100644 --- a/README.md +++ b/README.md @@ -185,7 +185,7 @@ Gera um CEP válido aleatório. ### is_valid_phone -Verifica se o número de telefone é valido, podendo ser telefone fixo ou celular. Apenas números, com DDD e sem o prefixo internacional, formatados como string. ***Exemplo: +55 48 9999 9999 ficaria '4899999999'.*** Esta função valida apenas números de telefone brasileiros e não verifica se o número realmente existe. +Verifica se o número de telefone é valido, podendo ser telefone fixo ou celular. Apenas números, com DDD e sem o prefixo internacional, formatados como string. ***Exemplo: +55 48 9999 9999 deve ser chamado como is_valid_phone('4899999999').*** Esta função valida apenas números de telefone brasileiros e não verifica se o número realmente existe. diff --git a/brutils/phone.py b/brutils/phone.py index 996076ab..0a019ad6 100644 --- a/brutils/phone.py +++ b/brutils/phone.py @@ -1,3 +1,5 @@ +import re + # FORMATTING ############ @@ -7,26 +9,35 @@ def is_valid_landline(phone_number): # type: (str) -> bool - return ( - isinstance(phone_number, str) - and phone_number.isdigit() - and len(phone_number) == 10 - and phone_number[0] != "0" - and phone_number[1] != "0" - and phone_number[2] in ["2", "3", "4", "5"] - ) + """ + Returns whether or not the verifying first 3 digits are a + match.This function validates only Brazilian landline numbers + and does not verify if the number actually exists. + Input should be a digit string of proper length. + + """ + pattern = re.compile(r"^[1-9][1-9][2-5]\d{7}$") + return isinstance(phone_number, str) and re.match(pattern, phone_number) def is_valid_mobile(phone_number): # type: (str) -> bool - return ( - isinstance(phone_number, str) - and phone_number.isdigit() - and len(phone_number) == 11 - and phone_number[0] != "0" - and phone_number[1] != "0" - and phone_number[2] == "9" - ) + """ + Returns whether or not the verifying first 3 digits are a + match.This function validates only Brazilian mobile numbers + and does not verify if the number actually exists. + Input should be a digit string of proper length. + + """ + pattern = re.compile(r"^[1-9][1-9][9]\d{8}$") + return isinstance(phone_number, str) and re.match(pattern, phone_number) def is_valid(phone_number): # type: (str) -> bool + """ + Returns whether or not the verifying first 3 digits are a + match.This function validates only Brazilian phone numbers + and does not verify if the number actually exists. + Input should be a digit string of proper length. + + """ return is_valid_landline(phone_number) or is_valid_mobile(phone_number) diff --git a/tests/test_phone.py b/tests/test_phone.py index 03a15648..6281972b 100644 --- a/tests/test_phone.py +++ b/tests/test_phone.py @@ -8,7 +8,7 @@ class TestPhone(TestCase): def test_is_valid_landline(self): # When landline phone is not string, returns False - self.assertFalse(is_valid_landline(1938814933)) + self.assertIs(is_valid_landline(1938814933), False) # When landline phone doesn't contain only digits, returns False self.assertFalse(is_valid_landline("(19)388149"))