From 776f0548ceae3f56135ee8ab99fdc01bb24abb01 Mon Sep 17 00:00:00 2001 From: Dustin Ingram Date: Fri, 20 Nov 2015 12:35:00 -0500 Subject: [PATCH] Fixes #12 --- vladiate/test/test_validators.py | 4 ++++ vladiate/validators.py | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/vladiate/test/test_validators.py b/vladiate/test/test_validators.py index 3af8401..2ab1d2c 100644 --- a/vladiate/test/test_validators.py +++ b/vladiate/test/test_validators.py @@ -101,6 +101,10 @@ def test_regex_validator_works(pattern, field): RegexValidator(pattern).validate(field) +def test_regex_validator_allows_empty(): + RegexValidator(r'foo.*', empty_ok=True).validate('') + + @pytest.mark.parametrize('pattern, field', [ (r'foo.*', 'afoo'), (r'^$', 'foo'), diff --git a/vladiate/validators.py b/vladiate/validators.py index 46bb46e..ec29380 100644 --- a/vladiate/validators.py +++ b/vladiate/validators.py @@ -119,13 +119,14 @@ def bad(self): class RegexValidator(Validator): ''' Validates that a field matches a given regex ''' - def __init__(self, pattern=r'di^'): + def __init__(self, pattern=r'di^', empty_ok=False): super(RegexValidator, self).__init__() self.regex = re.compile(pattern) + self.empty_ok = empty_ok self.failures = set([]) def validate(self, field, row={}): - if not self.regex.match(field): + if not self.regex.match(field) and (field or not self.empty_ok): self.failures.add(field) raise ValidationException( "'{}' does not match pattern /{}/".format(field, self.regex))