|
Kinder, gentler validators: msg#00058web.zope.plone.archetypes.devel
If you would like to replace Archetypes' default validators with some code that produces better error messages and that is a little more forgiving of imperfectly formatted data, you can use the code that follows. Would anybody object to my replacing the RegExValidator in validation.validators.validator.py and the default validators in validation.validators.__init__.py with the code below? Geoff Davis http://www.geoffdavis.net # code to install custom validators -- add this to MyProduct.__init__.py from Products.MyProduct.CustomValidators import install install() # add this in your product as CustomValidators.py import re from Products.validation import validation from Products.validation.interfaces import ivalidator from Products.validation.validators.validator import ignoreRE class RegexValidator: __implements__ = (ivalidator,) def __init__(self, name, errmsg='Validation Failed(%(name)s): on %(value)s', *args): self.name = name self.errmsg = errmsg self.regex = [] for r in args: self.regex.append(re.compile(r)) def __call__(self, value, *args, **kwargs): ignore = kwargs.get('ignore', None) if ignore: value = ignoreRE(value, ignore) for r in self.regex: m = r.match(value) if not m: return self.errmsg % {'name':self.name, 'value':value} return 1 _validators = [ RegexValidator('isDecimal', 'Please enter a decimal number', r'^\s*([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?\s*$'), RegexValidator('isInt', 'Please enter an integer', r'^\s*([+-])?\d+\s*$'), # RegexValidator('isPrintable', r'[a-zA-Z0-9\s]+$'), # RegexValidator('isSSN', r'^\d{9}$'), RegexValidator('isUSPhoneNumber', 'Please enter a phone number XXX-XXX-XXXX', r'\s*1?\s*[\(]?\s*\d{3}\s*[\)/.-]?\s*\d{3}\s*[\)/.-]?\d{4}'), # RegexValidator('isInternationalPhoneNumber', r'^\d+$'), # RegexValidator('isZipCode', r'^(\d{5}|\d{9})$'), # RegexValidator('isURL', r'(ht|f)tps?://[^\s\r\n]+'), RegexValidator('isEmail', 'Please enter a complete e-mail address', "^\s*([0-9a-zA-Z_&.+-]+!)*[0-9a-zA-Z_&.+-]+@(([0-9a-z]([0-9a-z-]*[0-9a-z])?\ .)+[a-z]{2,6}|([0-9]{1,3}\.){3}[0-9]{1,3})\s*$"), ] def install(): import sys sys.stdout.write('installing validators\n') for v in _validators: validation.register(v) ------------------------------------------------------- This SF.NET email is sponsored by: eBay Great deals on office technology -- on eBay now! Click here: http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5 |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: Schemata improvements: 00058, Geoff Davis |
|---|---|
| Next by Date: | Re: Re: Schemata improvements: 00058, robert |
| Previous by Thread: | Schemata improvementsi: 00058, Geoff Davis |
| Next by Thread: | What are the permissions needed to use Archtypes based objects: 00058, robert |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |