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
|
from Products.Formulator.FieldRegistry import FieldRegistry
from Products.Formulator.StandardFields import LinesField
from Products.Formulator.Validator import LinesValidator
import re
# This regex allows for a simple username or a username in a multi-dropbox
# (%). The host part has to be a normal fully qualified domain name,
# allowing for 6 characters (.museum) as a TLD. No bang paths (uucp), no
# dotted-ip-addresses, no angle brackets around the address (we assume these
# would be added by some custom script if needed), and of course no
# characters that don't belong in an e-mail address.
pattern = re.compile('^[0-9a-zA-Z_&.%+-]+@([0-9a-zA-Z]([0-9a-zA-Z-]*[0-9a-zA-Z])?\.)+[a-zA-Z]{2,6}$')
class EmailLinesValidator(LinesValidator):
message_names = LinesValidator.message_names + ['not_email']
not_email = 'You did not enter valid email addresses.'
def validate(self, field, key, REQUEST):
value = LinesValidator.validate(self, field, key, REQUEST)
for address in value:
if pattern.search(address.lower()) == None:
self.raise_error('not_email', field)
return value
EmailLinesValidatorInstance = EmailLinesValidator()
class EmailLinesField(LinesField):
meta_type = 'EmailLinesField'
validator = EmailLinesValidatorInstance
FieldRegistry.registerField(EmailLinesField, 'www/EmailField.gif')
|