Mongoengine: Phone field missing on model

Created on 28 Feb 2017  路  2Comments  路  Source: MongoEngine/mongoengine

Hello,

we've seen that a phone field does not exist on the mongoengine models. We have added it and that is the code resulting from the git diff on the fields.py file:

diff --git a/mongoengine/fields.py b/mongoengine/fields.py
index 1142509..c6f539d 100644
--- a/mongoengine/fields.py
+++ b/mongoengine/fields.py
@@ -39,7 +39,7 @@ except ImportError:
     ImageOps = None

 __all__ = (
-    'StringField', 'URLField', 'EmailField', 'IntField', 'LongField',
+    'StringField', 'URLField', 'EmailField', 'PhoneField', 'IntField', 'LongField',
     'FloatField', 'DecimalField', 'BooleanField', 'DateTimeField',
     'ComplexDateTimeField', 'EmbeddedDocumentField', 'ObjectIdField',
     'GenericEmbeddedDocumentField', 'DynamicField', 'ListField',
@@ -169,6 +169,18 @@ class EmailField(StringField):
         super(EmailField, self).validate(value)


+class PhoneField(StringField):
+    """
+    A field that validates input as phone.
+    """
+    PHONE_REGEX = re.compile("^\+[1-9]{1}[0-9]{3,14}$")
+
+    def validate(self, value):
+        if not PhoneField.PHONE_REGEX.match(value):
+            self.error('Invalid phone number: %s' % value)
+        super(PhoneField, self).validate(value)
+
+
 class IntField(BaseField):
     """32-bit integer field."""

Most helpful comment

Hi @marcoller I think this might be an overly simplistic approach to validating phone numbers (e.g. right now it would accept number extensions like +16503334444x1234). Phone validation is actually a pretty complex problem that has its own set of libraries, for instance https://github.com/daviddrysdale/python-phonenumbers.

Depending on one's use case it might be fine to choose this simpler approach or it might not. I'm a bit weary to add a PhoneField that might fail to support some valid phone numbers.

All 2 comments

Hi @marcoller I think this might be an overly simplistic approach to validating phone numbers (e.g. right now it would accept number extensions like +16503334444x1234). Phone validation is actually a pretty complex problem that has its own set of libraries, for instance https://github.com/daviddrysdale/python-phonenumbers.

Depending on one's use case it might be fine to choose this simpler approach or it might not. I'm a bit weary to add a PhoneField that might fail to support some valid phone numbers.

Let's close this issue as it is quite old and didn't get much attention. For future ref, note that django does not have a builtin phone field, there is another package (django-phone-field) that offers support

Was this page helpful?
0 / 5 - 0 ratings