1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#------------------------------------------------------------------------------
# Copyright (c) 2013-2025, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
#------------------------------------------------------------------------------
from __future__ import unicode_literals
import re
from enaml.validator import Validator
class PhoneNumberValidator(Validator):
""" A really dumb phone number validator.
"""
all_digits = re.compile(r'[0-9]{10}$')
dashes = re.compile(r'([0-9]{3})\-([0-9]{3})\-([0-9]{4})$')
proper = re.compile(r'\(([0-9]{3})\)\ ([0-9]{3})\-([0-9]{4})$')
def validate(self, text):
""" Validate the input text.
The text must be in of the form: (555) 555-5555 in order to
pass the standard validation. The fixup method will convert
some alternative forms into a correct format.
"""
return bool(self.proper.match(text))
def fixup(self, text):
""" Attempt to convert the given text into the proper format.
This method is called by the backend when the current text is
not valid, but can maybe be *made* to be valid by this method.
The returned text is re-validated to test for viability.
"""
match = self.dashes.match(text)
if match:
area = match.group(1)
prefix = match.group(2)
suffix = match.group(3)
return '(%s) %s-%s' % (area, prefix, suffix)
match = self.all_digits.match(text)
if match:
area = text[:3]
prefix = text[3:6]
suffix = text[6:10]
return '(%s) %s-%s' % (area, prefix, suffix)
return text
|