パスワード強度検証の正規表現

先読みアサーションを使用したパスワード強度検証の正規表現パターン。最小長、大文字、小文字、数字、特殊文字のチェック。

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文字以上)と漏洩パスワードリストとの照合を推奨しています。

ユースケース

パスワード強度に関するリアルタイムフィードバックが必要な登録フォームを構築し、どの要件を満たし、どの要件がまだ不足しているかをユーザーに表示する場合。

試してみる — Regex Cheat Sheet

フルツールを開く