Pocket

はじめに

おはようございます。
オンラインスクールに通いはじめて、1ヶ月が経過しそうです。

昨日、正規表現の単元を学びました。

正規表現とは

文字列の一部を抽出・置換したり、文字列が制約を満たしているか調べるための表現方法である

一例

/\A\d{3}[-]\d{4}\z/

花粉症に苦しめられて、頭が若干ぼんやりしていたからか、この記号列が全く入ってきませんでしたので、
今日改めて簡単にまとめてみようと思い立ったわけです。

正規表現とは

/\A\d{3}[-]\d{4}\z/のような、暗号のような文字列はどのように使えばいいのでしょうか。

Webアプリケーションにおいては、Validationで特に効果を発揮します。

Validation : (フォームなど)外部から入力されたパラメーターが、指定された形式で入っているか検証する仕組み

好き勝手なフォーマットの入力を許して、全てデータベースに格納していたら、管理が大変ですよね。
そうならないために、データベースへ保存してよい形式かをValidationで検証するわけです。

Validationの一例を挙げると、パラメータによってチェックする項目は様々ですね。

  • emailに@がついているか?
  • お客様の名前は全角のかな/カナもしくは漢字で書かれているか?
  • passwordは6文字以上で、英数字のみか?

これらのValidationのチェック項目を正規表現で定義しておくのです。

メタ文字の種類

正規表現では、メタ文字と呼ばれる特殊文字を組み合わせて、様々なチェック項目を表現します。

# meta文字の一例
.   ^   $   [   ]   *   +   ?   |   (   )

例えば、入力された文字列にアルファベットが3文字以上入っているかチェックしたいときは、以下のように書きます。

# パラメータに3文字以上のアルファベットが入っているかチェック
[a-z]{3,}

☞ []

角格好で囲まれた文字のうち、いずれか1つ出現するかを検出します。
アルファベットを検出したくて、[abcdefghijklmnopqrstuvxyz]と書くのはしんどいですよね。
そんなとき、-ハイフンを使って[a-z]と書けば、アルファベットのaからzまでのいずれかが出現するという意味になります。
同様に、[0-9]と書けば、数字の0から9までといった具合に、スッキリ記述できます。

☞ {n,m}

直前の文字が、少なくともn回、多くともm回出現するものを検出します。
今回の場合、直前の文字[a-z]が、少なくとも3回出現するか?という意味になりますね。

次の例です。メールアドレスは,***@***.comの形式かチェックしたいときは、以下のように書きます。

# メールアドレスは、***@***.comの形式かチェック
[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+

☞ [\w\d]

大文字小文字問わず英数字のいずれかどうかを表します。先ほどの、[a-z]、[0-9]、[A-Z]を組み合わせたものですね。

☞ +

+というメタ文字は直前の文字が1つ以上続くことを意味します。つまり、直前の[\w\d]が1文字以上あるということです。

☞ .[\w\d._-]+

顔文字にも見えますね。メタ文字ごとに読み解いていくと、
\.は「.ドット」が現れるよと示していますので、ドット以降に再び英数字が繰り返し続くということを表していますね。

終わりに

ぼんやりとですが、メタ文字の組み合わせを読み解いていけば、どんな意味なのかわかってきました。
ただ、正規表現全て覚えるのはしんどいので、Validationを組むときは、チートシート[1]を見ながらやらないとですね。

それではまた。