Ignore:
Timestamp:
6 Jun 2012, 13:58:49 (13 years ago)
Author:
uli
Message:

Make email format checks more moderate but working.

Location:
main/waeup.kofa/trunk/src/waeup/kofa
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py

    r8486 r8638  
    113113    __doc__ = u"Invalid email address"
    114114
     115#: Regular expression to check email-address formats. As these can
     116#: become rather complex (nearly everything is allowed by RFCs), we only
     117#: forbid whitespaces, commas and dots following onto each other.
    115118check_email = re.compile(
    116     r"[a-zA-Z0-9._%\-']+@([a-zA-Z0-9-]+.)*[a-zA-Z]{2,4}").match
     119    r"^[^@\s,]+@[^@\.\s,]+(\.[^@\.\s,]+)*$").match
    117120
    118121def validate_email(value):
  • main/waeup.kofa/trunk/src/waeup/kofa/tests/test_interfaces.py

    r7819 r8638  
     1# -*- coding: utf-8 -*-
    12## $Id$
    23##
     
    2021import grok
    2122import unittest
    22 from waeup.kofa.interfaces import DuplicationError, RoleSource
     23from waeup.kofa.interfaces import DuplicationError, RoleSource, check_email
    2324from waeup.kofa.testing import FunctionalLayer, FunctionalTestCase
     25
     26class RegExTests(unittest.TestCase):
     27    # Let's test regular expressions here
     28
     29    def check(self, expression, string):
     30        if expression.match(string) is not None:
     31            return True
     32        return False
     33
     34    def test_check_email_allowed(self):
     35        # the RE check_email does moderate format checks, allowing
     36        # also strange looking but valid email addresses
     37        self.assertTrue(check_email('manfred@domain.com') is not None)
     38        self.assertTrue(check_email('bob@localhost') is not None)
     39        self.assertTrue(check_email('bob@h5.waeup.org') is not None)
     40        self.assertTrue(check_email('bob@idn_with_ümlaut.com') is not None)
     41        # also unicodes with umlauts work
     42        self.assertTrue(check_email(u'bob@idn_with_ümlaut.com') is not None)
     43        self.assertTrue(
     44            check_email('bob_the-complex+mbox@my.place') is not None)
     45        return
     46
     47    def test_check_email_forbidden(self):
     48        # the RE check_email does moderate format checks, but doesn't
     49        # accept everything.
     50        # no domain at all
     51        self.assertTrue(check_email('bob') is None)
     52        self.assertTrue(check_email('bob@') is None)
     53        # each domain part must contain at least something
     54        self.assertTrue(check_email('bob@h5.waeup.') is None)
     55        # whitespaces in addresses
     56        self.assertTrue(check_email('spacey @domain.com') is None)
     57        self.assertTrue(check_email('tabby\t@domain.com') is None)
     58        # two dots next to each other in domain (empty domain part)
     59        self.assertTrue(check_email('bob@some..domain') is None)
     60        # commas are forbidden
     61        self.assertTrue(check_email('bob@foo,alice@bar') is None)
     62        return
    2463
    2564class DuplicationErrorTests(unittest.TestCase):
Note: See TracChangeset for help on using the changeset viewer.