パスワード(大文字や記号が少なくとも一文字含まれる)の正規表現

正規表現のサンプルの中でパスワードの電話番号にマッチする正規表現について解説します。パスワードは指定の文字の種類と文字列の長さにマッチするかどうかに加えて、少なくとも一文字は大文字のアルファベットや記号が含まれていなければならないという条件にもマッチするようにします。

(Last modified: )

文字の種類と文字数を設定したパスワードにマッチする正規表現

文字の種類と文字数の範囲が決めらえたパスワードです。次のような条件としました。

使用できる文字の種類
・アルファベットの大文字と小文字
・数字
・ピリオド(.)、スラッシュ(/)、クエスチョンマーク(?)、ハイフン(-)

文字数
・8文字以上24文字以下

この条件のパスワードにマッチする正規表現は次のようになります。

^[a-zA-Z0-9.?/-]{8,24}$

以下解説と前提条件です。

パスワードとして使用可能な文字を角括弧 [] の中に記述します。ピリオド( . )やクエスチョンマーク( ? )は本来特別な意味を持つ文字ですが、角括弧の中に記述する場合はエスケープは不要です。ハイフン( - )は角括弧の先頭または最後に記述する場合はこちらもエスケープ不要です。

※ スラッシュ( / )はパターンとしてのエスケープは不要ですが、例えば JavaScript の正規表現リテラルの中で記述する場合はバックスラッシュを使ったエスケープが必要となります。

[a-zA-Z0-9.?/-]

文字数を 8 文字以上 24 文字以内にするには次のように記述します。

{8,24}

使用可能な文字の種類を角括弧の中に列挙し、直前の文字の繰り返回数をそのあとに指定します。これに文字列の先頭にマッチするキャレット( ^ )と文字列の末尾にマッチするドル記号を( $ )を追加して組み合わせたものがパスワードを表す正規表現となります。

[0-9] の部分は \d と記述しても構いません。

サンプル

JavaScript を使って簡単な正規表現のサンプルを作成してみます。

const regex = /^[a-zA-Z0-9.?\/-]{8,24}$/;

regex.test('alkeDf82j');
--> true
regex.test('782bbrejjow');
--> true
regex.test('aokk4');
--> false // 文字数不足
regex.test('pow95#f56');
--> false // 許可されていない文字種

文字の種類と文字数を設定したパスワードにマッチする正規表現(1)

指定した文字が少なくとも一つ含まれるパスワードにマッチする正規表現

文字の種類と文字数の範囲が決めらえたパスワードです。さらに指定した文字が少なくとも一つ含まれる条件を追加しました。

使用できる文字の種類
・アルファベットの大文字と小文字
・数字
・ピリオド(.)、スラッシュ(/)、クエスチョンマーク(?)、ハイフン(-)

文字数
・8文字以上24文字以下

パスワードの制限
・大文字のアルファベットを少なくとも一つ含む
・記号を少なくとも一つ含む

この条件のパスワードにマッチする正規表現は次のようになります。

^(?=.*[A-Z])(?=.*[.?/-])[a-zA-Z0-9.?/-]{8,24}$

以下解説と前提条件です。

パスワードで使用できる文字が 8 文字以上 24 文字以下の部分は一つ前のサンプルと同じです。

[a-zA-Z0-9.?\/-]{8,24}$

これに少なくとも大文字が一つ含まれ、少なくとも記号が一つ含まれる場合にマッチさせるには「肯定の先読み」を使用します。(肯定の先読みについては「正規表現における先読みと後読みを使ったパターン」を参照されてください。)

(?=.*[A-Z])   // 少なくとも大文字が一つ含まれる
(?=.*[.?/-])  // 少なくても記号が一つ含まれる

使用可能な文字の種類を角括弧 [] の中に列挙し、直前の文字の繰り返回数をそのあとに指定します。そして肯定の先読みを使って、対象の文字列に大文字が少なくとも一つ、記号が少なくとも一つ含まれているのを確認します。これに文字列の先頭にマッチするキャレット( ^ )と文字列の末尾にマッチするドル記号を( $ )を追加して組み合わせたものが条件付きのパスワードを表す正規表現となります。

[0-9] の部分は \d と記述しても構いません。

サンプル

JavaScript を使って簡単な正規表現のサンプルを作成してみます。

const regex = /^(?=.*[A-Z])(?=.*[.?/-])[a-zA-Z0-9.?/-]{8,24}$/;

regex.test('pahl/fGn84');
--> true
regex.test('Kuh-le42mP.Oj');
--> true
regex.test('Pewu93lfhwl');
--> false // 記号が含まれていない
regex.test('p8544ow95/f56');
--> false // 大文字が含まれていない

指定した文字が少なくとも一つ含まれるパスワードにマッチする正規表現(1)

-- --

正規表現のサンプルの中でパスワードの電話番号にマッチする正規表現について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。