げんきちの秘密基地

エンジニアリングが世の中の思いを実現してきた歴史に気づき、29歳未経験からWEBエンジニアとして転生!【Danger】綺麗事を割と本気で言ってきます【GitHub】https://github.com/0840kg【Twitter】https://twitter.com/0840kg

誰でもわかる!パスワード用の正規表現の読み方

ぞす!げんきちです!\\\\٩( 'ω' )و ////

 

「いや、誰だよ」って方は、下記リンクを見てやってください。

  1. はじめまして!げんきちです! - げんきちの秘密基地

  2. 僕がエンジニアになりたい理由 - げんきちの秘密基地

目次〜

f:id:www08056561815:20190223213319j:plain

半角英字と半角数字それぞれ1文字以上含む8文字以上100文字以下の文字列

 メルカリでパスワード用の正規表現をネットからコピペしました。

/^(?=.*?[a-z])(?=.*?\d)[a-z\d]{8,100}$/i

 今後もよくお世話になる表現だと思います。

理解を深める良い機会なので分解して考えてみました。

 

分解してみました

/ デリミタ。特別の意味を持たない、ただの文字。正規表現パターンの両端を同じ囲むことで、パターンの範囲を明示します。

 

^ 先読みアンカー。行の先頭にマッチ。普通の正規表現では文字に対してマッチしますが,アンカーは位置に対してマッチします。

 

( ~ ) ( )内を1文字扱い

 

?= 肯定的先読み。文字列内にパターンが現れると,パターンの直前の位置にマッチします。

 

. 任意の1文字

 

*?

非貪欲的正規表現直前の文字の0回以上の繰り返し。先頭からマッチするパターンを探していき、1回でもマッチしたらその場でマッチ対象を探すのを止めます。

 

[ ~ ] [ ]の中のどれか1文字

 

- パターンの範囲を設定

 

\d 数字1文字

 

{min,max} 直前の文字のmin以上max以下の繰り返し(min、maxは省略可能)

 

$ 後読みアンカー。行の末尾にマッチ。普通の正規表現では文字に対してマッチしますが,アンカーは位置に対してマッチします。

 

i 大文字・小文字を区別しないで検索

 

前半部分の^(?=.*?[a-z])(?=.*?\d)

 

(?=.*?[a-z])

=任意の文字が0文字以上繰り返された後にa-zのいずれか1文字

=文字列のどこかにa-zのいずれかがあること

 

(?=.*?\d)

=任意の文字が0文字以上繰り返された後に数字1文字

=文字列のどこかに0-9のいずれかがあること

 

^(?=.*?[a-z])(?=.*?\d)

「a-zのいずれかを含む」かつ「0-9いずれかを含む」文字列 。

つまり「英字と数字が両方1つ以上あるか」の判定を意味しています。

 

後半部分の[a-z\d]{8,100}$/i

i

「英字大小関わらず」

[a-z\d]

「a-z、0-9のいずれかで構成された」

{8,100}

「8文字以上100文字以下の文字列」を意味しています。

  

おまけ

メールアドレス用の正規表現(簡易版)です。

/^\S+@\S+\.\S+$/

 

\S 半角スペース、タブ、改行以外の1文字

 

+ 直前の文字の1回以上の繰り返し

 

「困難は分割せよ」って誰か言ってました/(^o^)\

プログラミングはロジックを重ねていけば必ず答えがあるので面白いです。

 

<一日一新>

キーボードカバーを装着。ゴム感がたまらないです。

 

<学習進捗>

学習開始からの期間 :77日
今日までの合計時間:768h
今日までに到達すべき目標時間:703h
目標との解離:65h
10,000時間」まで、

 

残り・・・9,235時間!」

 

以上です。

読んでくれた方々、ありがとうございました!((_ _ (´ω` )ペコ。

 

genkichi.hateblo.jp

genkichi.hateblo.jp

 

f:id:www08056561815:20190224095507g:plain

twitter.com