Skip to content

Commit b255326

Browse files
Add validate_phonenumber to allow short numbers
1 parent b8d1886 commit b255326

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

phonenumber_field/validators.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import phonenumbers
12
from django.core.exceptions import ValidationError
23
from django.utils.translation import gettext_lazy as _
34

@@ -10,3 +11,14 @@ def validate_international_phonenumber(value):
1011
raise ValidationError(
1112
_("The phone number entered is not valid."), code="invalid"
1213
)
14+
15+
16+
def validate_phonenumber(value):
17+
phone_number = to_python(value)
18+
if isinstance(phone_number, PhoneNumber) and not (
19+
phonenumbers.is_valid_number(phone_number)
20+
or phonenumbers.is_valid_short_number(phone_number)
21+
):
22+
raise ValidationError(
23+
_("The phone number entered is not valid."), code="invalid"
24+
)

tests/test_formfields.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from phonenumber_field.formfields import PhoneNumberField, SplitPhoneNumberField
1212
from phonenumber_field.phonenumber import PhoneNumber
13+
from phonenumber_field.validators import validate_phonenumber
1314

1415
ALGERIAN_PHONE_NUMBER = "+213799136332"
1516

@@ -132,6 +133,16 @@ class PhoneNumberForm(forms.Form):
132133
form.errors, {"number": ["Enter a valid phone number (e.g. +12125552368)."]}
133134
)
134135

136+
def test_validate_shortcode(self):
137+
class ShortCodePhoneNumberField(PhoneNumberField):
138+
default_validators = [validate_phonenumber]
139+
140+
class TestForm(forms.Form):
141+
phone = ShortCodePhoneNumberField(region="FR")
142+
143+
form = TestForm({"phone": "1010"})
144+
self.assertIs(form.is_valid(), True)
145+
135146

136147
class SplitPhoneNumberFormFieldTest(SimpleTestCase):
137148
def example_number(self, region_code: str) -> PhoneNumber:
@@ -580,3 +591,13 @@ class TestForm(forms.Form):
580591
form = TestForm(phone_data)
581592
self.assertIs(form.is_valid(), False)
582593
self.assertEqual(form.errors["phone"], [error_message])
594+
595+
def test_validate_shortcode(self):
596+
class ShortCodeSplitPhoneNumberField(SplitPhoneNumberField):
597+
default_validators = [validate_phonenumber]
598+
599+
class TestForm(forms.Form):
600+
phone = ShortCodeSplitPhoneNumberField()
601+
602+
form = TestForm({"phone_0": "FR", "phone_1": "1010"})
603+
self.assertIs(form.is_valid(), True)

0 commit comments

Comments
 (0)