0
0

More than 1 year has passed since last update.

パスワードバリデーション用の正規表現のまとめ・ちょっとした説明

Posted at

はじめに

Next.js + rails アプリでフロント側にパスワードのバリデーションを実装しようと思い、
どうやってやるのかなーと調べていました。
使える正規表現自体は見つかったのですが、表現の内容を理解するためにMDNのページを行ったり来たりして大変だったので
今回使った特殊文字をまとめておきます。
プラスちょっとだけ構造を説明します。

想定している読者

  • 初心者
  • Javascriptでパスワードのバリデーションを実装したい方
  • 見つけた正規表現を理解せずコピペで使うのは嫌な方

今回使う正規表現

/^(?=.*[a-zA-Z])(?=.*\d).{6,20}$/
  • 数字とアルファベットを最低1文字ずつ含む
  • 6文字以上20文字以下

の文字列にマッチします。

こちらの記事を参考にしました。
言語別:パスワード向けの正規表現

3つに分けたほうが理解しやすいと思ったので、分けて書きます。

Part1

/^(?=.*[a-zA-Z])(?=.*\d)/
特殊表現 意味
^ 文頭にマッチ
(?=hoge) 直前の表現にhogeが続く場合のみマッチするようになる
. 任意の1文字にマッチ
* 直前の表現の0回以上の繰り返し
[a-zA-Z] 大/小文字アルファベット1文字にマッチ
\d アラビア数字1文字にマッチ

Part1は文頭^に対して2つの(?=hoge)がかかっています。
ここでは

「任意の文字の0回以上の繰り返し+何かしらのアルファベット1文字」が後ろに続き(?=.*[a-zA-Z])、
かつ
「任意の文字の0回以上の繰り返し+何かしらの数字1文字」が後ろに続く(?=.*\d)
「文頭」にマッチします。
つまり数字とアルファベットを含む文の文頭にマッチします。

Part2

/.{6,20}/
特殊表現 意味
. 任意の1文字にマッチ
{x,y} 直前の表現のx回以上y回以下の繰り返し

Part2は
任意の文字の6回以上20回以下の繰り返し
にマッチします。
つまり6文字以上20文字以下の文字列にマッチします。

Part3

/$/
特殊表現 意味
$ 入力の末尾にマッチ

Part3は入力の末尾にマッチします。それだけです。

まとめて

/^(?=.*[a-zA-Z])(?=.*\d).{6,20}$/
//最初と一緒です

「数字とアルファベットを含む文の文頭」+「6文字以上20文字以下の文字列」+「入力末尾」
つまり
数字とアルファベットを含む6文字以上20文字以下の文字列にマッチする正規表現ができました!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0