Changeset 4241
- Timestamp:
- 12/26/06 17:46:10 (2 years ago)
- Files:
-
- django/trunk/django/newforms/fields.py (modified) (5 diffs)
- django/trunk/tests/regressiontests/forms/tests.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/newforms/fields.py
r4223 r4241 214 214 215 215 class RegexField(Field): 216 def __init__(self, regex, error_message=None, required=True, widget=None, label=None): 216 def __init__(self, regex, max_length=None, min_length=None, error_message=None, 217 required=True, widget=None, label=None): 217 218 """ 218 219 regex can be either a string or a compiled regular expression object. … … 224 225 regex = re.compile(regex) 225 226 self.regex = regex 227 self.max_length, self.min_length = max_length, min_length 226 228 self.error_message = error_message or gettext(u'Enter a valid value.') 227 229 … … 236 238 if not self.required and value == u'': 237 239 return value 240 if self.max_length is not None and len(value) > self.max_length: 241 raise ValidationError(gettext(u'Ensure this value has at most %d characters.') % self.max_length) 242 if self.min_length is not None and len(value) < self.min_length: 243 raise ValidationError(gettext(u'Ensure this value has at least %d characters.') % self.min_length) 238 244 if not self.regex.search(value): 239 245 raise ValidationError(self.error_message) … … 246 252 247 253 class EmailField(RegexField): 248 def __init__(self, required=True, widget=None, label=None):249 RegexField.__init__(self, email_re, gettext(u'Enter a valid e-mail address.'), required, widget, label)254 def __init__(self, max_length=None, min_length=None, required=True, widget=None, label=None): 255 RegexField.__init__(self, email_re, max_length, min_length, gettext(u'Enter a valid e-mail address.'), required, widget, label) 250 256 251 257 url_re = re.compile( … … 263 269 264 270 class URLField(RegexField): 265 def __init__(self, required=True, verify_exists=False, widget=None, label=None,271 def __init__(self, max_length=None, min_length=None, required=True, verify_exists=False, widget=None, label=None, 266 272 validator_user_agent=URL_VALIDATOR_USER_AGENT): 267 RegexField.__init__(self, url_re, gettext(u'Enter a valid URL.'), required, widget, label)273 RegexField.__init__(self, url_re, max_length, min_length, gettext(u'Enter a valid URL.'), required, widget, label) 268 274 self.verify_exists = verify_exists 269 275 self.user_agent = validator_user_agent django/trunk/tests/regressiontests/forms/tests.py
r4240 r4241 1099 1099 1100 1100 RegexField takes an optional error_message argument: 1101 >>> f = RegexField('^\d\d\d\d$', 'Enter a four-digit number.')1101 >>> f = RegexField('^\d\d\d\d$', error_message='Enter a four-digit number.') 1102 1102 >>> f.clean('1234') 1103 1103 u'1234' … … 1110 1110 ... 1111 1111 ValidationError: [u'Enter a four-digit number.'] 1112 1113 RegexField also access min_length and max_length parameters, for convenience. 1114 >>> f = RegexField('^\d+$', min_length=5, max_length=10) 1115 >>> f.clean('123') 1116 Traceback (most recent call last): 1117 ... 1118 ValidationError: [u'Ensure this value has at least 5 characters.'] 1119 >>> f.clean('abc') 1120 Traceback (most recent call last): 1121 ... 1122 ValidationError: [u'Ensure this value has at least 5 characters.'] 1123 >>> f.clean('12345') 1124 u'12345' 1125 >>> f.clean('1234567890') 1126 u'1234567890' 1127 >>> f.clean('12345678901') 1128 Traceback (most recent call last): 1129 ... 1130 ValidationError: [u'Ensure this value has at most 10 characters.'] 1131 >>> f.clean('12345a') 1132 Traceback (most recent call last): 1133 ... 1134 ValidationError: [u'Enter a valid value.'] 1112 1135 1113 1136 # EmailField ################################################################## … … 1156 1179 ... 1157 1180 ValidationError: [u'Enter a valid e-mail address.'] 1181 1182 EmailField also access min_length and max_length parameters, for convenience. 1183 >>> f = EmailField(min_length=10, max_length=15) 1184 >>> f.clean('a@foo.com') 1185 Traceback (most recent call last): 1186 ... 1187 ValidationError: [u'Ensure this value has at least 10 characters.'] 1188 >>> f.clean('alf@foo.com') 1189 u'alf@foo.com' 1190 >>> f.clean('alf123456788@foo.com') 1191 Traceback (most recent call last): 1192 ... 1193 ValidationError: [u'Ensure this value has at most 15 characters.'] 1158 1194 1159 1195 # URLField ################################################################## … … 1248 1284 ... 1249 1285 ValidationError: [u'This URL appears to be a broken link.'] 1286 1287 EmailField also access min_length and max_length parameters, for convenience. 1288 >>> f = URLField(min_length=15, max_length=20) 1289 >>> f.clean('http://f.com') 1290 Traceback (most recent call last): 1291 ... 1292 ValidationError: [u'Ensure this value has at least 15 characters.'] 1293 >>> f.clean('http://example.com') 1294 u'http://example.com' 1295 >>> f.clean('http://abcdefghijklmnopqrstuvwxyz.com') 1296 Traceback (most recent call last): 1297 ... 1298 ValidationError: [u'Ensure this value has at most 20 characters.'] 1250 1299 1251 1300 # BooleanField ################################################################
