def test_id(user_id):
import re
regex = r"(secret\s?)?agent\s([0-9]{3}|james bond)"
if not re.match(regex, user_id):
print "Incorrect user ID: %s" % user_id
else:
print "OK: %s" % user_id
test_id('agent james bond')
test_id('secret agent 007')
test_id('agent jack black')
test_id('agent j')
Running this code results in the following output:
OK: agent james bond
OK: secret agent 007
Incorrect user ID: agent jack black
Incorrect user ID: agent j
So what if we want to give a hint, about the minimum and maximum length? In many cases guessing/manually evaluating the potential match size should be easy. However, if You plan using some more sophisticated regular expressions, You should not rely on Your intuition - but on calculations:
def test_id(user_id):
import re
import sre_parse
regex = r"(secret\s?)?agent\s([0-9]{3}|james bond)"
match_range = sre_parse.parse(regex).getwidth()
if len(user_id) < match_range[0] or \
len(user_id) > match_range[1]:
print "User ID %s should be between %s and %s characters" % \
(user_id, match_range[0], match_range[1])
elif not re.match(regex, user_id):
print "Incorrect user ID: %s" % user_id
else:
print "OK: %s" % user_id
test_id('agent james bond')
test_id('secret agent 007')
test_id('agent jack black')
test_id('agent j')
This time the output should look like this:
OK: agent james bond
OK: secret agent 007
Incorrect user ID: agent jack black
User ID agent j should be between 9 and 23 characters
It certainly is more descriptive.
Cheers!
~KR
No comments:
Post a Comment