单一的正则表达式并不是每个字符串验证问题的答案。
使用基本的字符串函数和多个更小的正则表达式更具可读性。(为什么要尝试使用正则表达式检查字符串的长度,什么时候length(pwd)
会做同样的事情?)
下面是一些可以很好地转换为 Java 的 Python 代码:
import re
def validate_password(pwd):
# return true if valid or false is invalid.
if ( len(pwd) < 2 or len(pwd) > 10 ):
print "Password %s : Failed length requirement" % pwd
return False
if ( re.search(r"\d", pwd) == None ):
print "Password %s : must contain at least one number" % pwd
return False
if ( re.search(r"[a-zA-Z]", pwd) == None ):
print "Password %s : must contain at least one alphabetical character" % pwd
return False
if ( re.search(r"(...+)\1", pwd) != None ):
print "Password %s : must not contain any repeating substrings of three characters or more" % pwd
return False
print "Password %s is OK" % pwd
return True
test_pwds = [ "1", "123", "aardvark", "12ardvark", "12aardvark", "foofoofoo1" ]
for pwd in test_pwds:
validate_password (pwd)
测试输出:
Password 1 : Failed length requirement
Password 123 : must contain at least one alphabetical character
Password aardvark : must contain at least one number
Password 12ardvark is OK
Password 12aardvark is OK
Password foofoofoo1 : must not contain any repeating substrings of three characters or more
使用一系列小测试而不是一个大测试来验证输入有几个好处:
- 更容易理解。
- 更容易调试。
- 以后更容易维护。(想象一下你的老板增加了另一个要求,即密码中必须至少出现两个符号。)
- 您可以告诉用户他们的密码失败的标准,而不是像“您的密码必须满足
giant list of criteria
”这样的通用消息。