Created
October 12, 2018 00:20
-
-
Save cheldernunes/49b2f81add94e06712607473d67cff32 to your computer and use it in GitHub Desktop.
Django RegexValidator for phone numbers with ddd+number(8 or 9) digits
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# brazil's code areas | |
# http://www.anatel.gov.br/setorregulado/codigos-nacionais/codigos-nacionais | |
# http://www.anatel.gov.br/legislacao/resolucoes/16-2001/383-resolucao-263 | |
phone_validator = RegexValidator(regex=r'^(1[1-9]|2[1-2,4,7,8]|3[1-5]|3[7-8]|4[1-9]' | |
r'|5[1,3-5]|6[1-9]|7[1,3,4,5,7,9]' | |
r'|8[1-9]|9[1-9]){1}[0-9]{8,9}$', | |
message="Phone number must be entered in the format '99000000000'. " | |
"where 99(2 digits) is a brazil code area, and 000000000 is a number phone " | |
"with 8 or 9 digits.") | |
DDDS_BRAZIL = { | |
"11": "SP", | |
"12": "SP", | |
"13": "SP", | |
"14": "SP", | |
"15": "SP", | |
"16": "SP", | |
"17": "SP", | |
"18": "SP", | |
"19": "SP", | |
"21": "RJ", | |
"22": "RJ", | |
"24": "RJ", | |
"27": "ES", | |
"28": "ES", | |
"31": "MG", | |
"32": "MG", | |
"33": "MG", | |
"34": "MG", | |
"35": "MG", | |
"37": "MG", | |
"38": "MG", | |
"41": "PR", | |
"42": "PR", | |
"43": "PR", | |
"44": "PR", | |
"45": "PR", | |
"46": "PR", | |
"47": "SC", | |
"48": "SC", | |
"49": "SC", | |
"51": "RS", | |
"53": "RS", | |
"54": "RS", | |
"55": "RS", | |
"61": "DF", | |
"62": "GO", | |
"63": "TO", | |
"64": "GO", | |
"65": "MT", | |
"66": "MT", | |
"67": "MS", | |
"68": "AC", | |
"69": "RO", | |
"71": "BA", | |
"73": "BA", | |
"74": "BA", | |
"75": "BA", | |
"77": "BA", | |
"79": "SE", | |
"81": "PE", | |
"82": "AL", | |
"83": "PB", | |
"84": "RN", | |
"85": "CE", | |
"86": "PI", | |
"87": "PE", | |
"88": "CE", | |
"89": "PI", | |
"91": "PA", | |
"92": "AM", | |
"93": "PA", | |
"94": "PA", | |
"95": "RR", | |
"96": "AP", | |
"97": "AM", | |
"98": "MA", | |
"99": "MA" | |
} | |
def test_size_number(): | |
with pytest.raises(ValidationError): | |
# ddd + big number | |
phone_validator.__call__('11999999999999') | |
# ddd + tiny number | |
phone_validator.__call__('21999999') | |
# ddd + eight number | |
phone_validator.__call__('2199999999') | |
# ddd + nine number | |
phone_validator.__call__('21999999999') | |
def test_nice_ddd_number(): | |
for ddd in DDDS_BRAZIL: | |
assert phone_validator.__call__('{}999999999'.format(ddd)) is None | |
def test_wrong_ddd_number(): | |
wrongs_ddds = [val for val in range(10, 100) if str(val) not in [ddd for ddd in DDDS_BRAZIL]] | |
with pytest.raises(ValidationError): | |
for ddds in wrongs_ddds: | |
phone_validator.__call__('{}999999999999'.format(ddds)) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment