On Monday, September 3, 2012 8:10:46 PM UTC, g1smd.1 wrote: > > I see that there are routines for validating telephone numbers in forms in > Django for several countries. > > The code for that can usually be found in the forms.py file located in the > various country folders here: > https://github.com/django/django/tree/master/django/contrib/localflavor > > So far, there is nothing for GB numbers, here: > https://github.com/django/django/tree/master/django/contrib/localflavor/gb > > I've written a bunch of RegEx patterns to get this functionality started. > The patterns are 100% fully tested. All that's needed is a few lines of > python logic to string them together. The details can be found at: > https://github.com/django/django/pull/316/files > > My python foo is almost zero. Anyone care to have a go at getting this to > work? > > RegEx 1 checks the user entered something that looks like a GB telephone > number: > 020 3000 5555 > 02075 567 234 > 0114 223 4567 > 01145 345 567 > +44 1213 456 789 > 00 44 (0) 1697 73555 > 011 44 11 4890 2345 > and several other formats, without worrying if the format is correct for > this particular number (but read on). It allows for national or > international format, even for two common international dial prefixes. What > is most important is that the user enters the right number of digits. Don't > constrain the user to use a particular format for entry. > "Be lenient in what you accept, be strict in what you send." (Postel's Law) > > RegEx 2 extracts the NSN part of the number in $3, with "44" or NULL in $2 > (so you know if international or national format was used on input), and > any extension in $4. Store $2 and $4 for later. Send $3 on to RegEx 3. > > RegEx 3 tests the NSN part of the number is in a valid range and has the > right number of digits for that range (GB numbers can be 9 or 10 digits > long). This RegEx pattern is very detailed. You can say that a number is > possible or is invalid with this RegEx. > > RegEx Group 4. Here, there's a bunch of RegEx patterns that specify how a > GB number should be formatted, detailed by number length and initial > digits. These rules cover all GB numbers. > > The last bit is to add the 0 or +44 back on, and append the original > extension number (if present) and present it back to the user. > > 020 3000 5555 => Valid: 020 3000 5555 > 02075 567 234 => Valid: 020 7556 7234 > 0114 223 4567 => Valid: 0114 223 4567 > 01145 345 567 => Valid: 0114 534 5567 > +44 1213 456 789 => Valid: +44 121 345 6789 > 00 44 (0) 1697 73555 => Valid: +44 16977 3555 > 011 44 11 4890 2345 => Valid: +44 114 890 2345 > 0623 111 3456 => NOT VALID > > >
This is now also filed as ticket #18903 at https://code.djangoproject.com/ticket/18903 -- You received this message because you are subscribed to the Google Groups "Django users" group. To view this discussion on the web visit https://groups.google.com/d/msg/django-users/-/K9lpBp_pfUMJ. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.