HTML
正規表現
regexp

「英数記号あり(大文字小文字の区別なし)で、かつ8文字以上」の正規表現

More than 3 years have passed since last update.


  • 正規表現詳しい方、これで合っているか教えてください

  • サーバ側の処理は別途必要です

<input type="password" id="userPasswd" required pattern="^(?=.*[0-9])(?=.*[A-Za-z])(?=.*[!\x22\#$%&@'()*+,-./_])[\w!\x22\#$%&@'()*+,-./]{8,}$" data-required="required" placeholder="Password" name="userPasswd">


説明


オリジナル

^(?=.*[0-9])(?=.*[A-Za-z])(?=.*[!\x22\#$%&@'()*+,-./_])[\w!\x22\#$%&@'()*+,-./]{8,}$


1.

これは、「ゼロ幅の肯定的アサーション」、すなわち

直後の要素が「0~9」の数字である、という条件を満たしている必要がある。

(?=.*[0-9])

なので、以下のようになると、

「直後の要素が、

0から9の数字を含む、かつ

文字を含む(大文字小文字を区別しない)、かつ

[!\x22\#$%&@'()*+,-./_」のいずれかの記号を含む」

という条件になる。

(?=.*[0-9])(?=.*[A-Za-z])(?=.*[!\x22\#$%&@'()*+,-./_])

なお、ここではhtmlのinput要素の中での正規表現なので、

"をエスケープもしくはASCIIコードで表現する必要があるので、

\x22と表現している。


2.

上記の

「直後の要素が、

0から9の数字を含む、かつ

文字を含む(大文字小文字を区別しない)、かつ

[!\x22\#$%&@'()*+,-./_」のいずれかの記号を含む」



「直後の要素」が、以下のようになる。

[\w!\x22\#$%&@'()*+,-./]

まず、

\w

が、「数字、文字とアンダースコア」を含む。

続いて、

[!\x22\#$%&@'()*+,-./]

は正規表現に含みたい記号を書く。

注意点は


  • 上述のとおり、"だけはアスキーコードで書いている


  • \wがアンダースコアを含むので、記号リストからは省いている


3.

あとはそれに

「8文字以上」と先頭、末尾を示す記号を付けるだけです。

^(?=.*[0-9])(?=.*[A-Za-z])(?=.*[!\x22\#$%&@'()*+,-./_])[\w!\x22\#$%&@'()*+,-./]{8,}$

これで、

「英数記号あり(大文字小文字の区別なし)で、かつ8文字以上」の正規表現ができあがる。

また、その記号とは

!"\#$%&@'()*+,-./_

である。