パスワード強度検証の正規表現
先読みアサーションを使用したパスワード強度検証の正規表現パターン。最小長、大文字、小文字、数字、特殊文字のチェック。
Assertions
詳細な説明
正規表現によるパスワード強度検証
先読みアサーションは、文字を消費せずに複数の条件を独立してチェックできるため、パスワード検証に最適です。
基本要件パターン
パスワードが8文字以上で、大文字1つ、小文字1つ、数字1つを含むことをチェック:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$
各先読みが1つの条件をチェックします:
(?=.*[a-z])— 小文字が少なくとも1つ(?=.*[A-Z])— 大文字が少なくとも1つ(?=.*\d)— 数字が少なくとも1つ.{8,}$— 合計8文字以上
強力なパスワードパターン
特殊文字要件を追加:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-={}\[\]:;"'<>?,./]).{12,}$
ここでの先読みの動作原理
各 (?=.*X) は文字列の先頭(^ でアンカー)から始まり、X にマッチする文字が少なくとも1つあるかスキャンします。先読みはゼロ幅なので、各チェック後に位置がリセットされ、次の先読みが同じ開始点から実行されます。
否定条件
否定先読みを使って特定のパターンを禁止することもできます:
^(?!.*\s)(?!.*(.)(.*\1){2}).{8,}$
(?!.*\s)— 空白は許可されない(?!.*(.).*\1.*\1)— 同じ文字が2回以上繰り返されない
重要なセキュリティノート
クライアントサイドの正規表現検証はユーザビリティ機能であり、セキュリティ対策ではありません。パスワードポリシーは常にサーバーサイドで強制してください。最新のガイダンス(NIST SP 800-63B)では、複雑な文字要件よりも最小長(8文字以上)と漏洩パスワードリストとの照合を推奨しています。
ユースケース
パスワード強度に関するリアルタイムフィードバックが必要な登録フォームを構築し、どの要件を満たし、どの要件がまだ不足しているかをユーザーに表示する場合。