モノリシック正規表現は、すべての文字列検証の問題に対する答えではありません。
基本的な文字列関数と複数の小さい正規表現を使用すると、はるかに読みやすくなります。(同じことをするのに、なぜ正規表現を使用して文字列の長さをチェックしようとするの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
1つの巨大なテストではなく、一連の小さなテストを使用して入力を検証することには、いくつかの利点があります。
- 理解しやすいです。
- デバッグが簡単です。
- 将来的には保守が容易になります。(上司が別の要件を追加するとします。パスワードには少なくとも2つの記号が含まれている必要があります。)
- 「パスワードは満たす必要があります」などの一般的なメッセージの代わりに、パスワードが失敗した基準をユーザーに伝えることができます
giant list of criteria
。