Form等のバリデーションで使用する正規表現、多くの場合は
Google等でコピペをしてくれば終わりなのですが、
少し読めるようになっておくと、間違い等にも気付きやすくなるかなと思い、
簡単なルールだけまとめてみました。
ルール(メタキャラクタ)
ルール | 意味 |
---|---|
^ | 文の始め |
$ | 文の終わり |
. | 任意の1文字 |
[大括弧囲み] | いづれか1文字 |
-(マイナス) | 範囲 |
[ ^ ](大括弧+^) | 指定クラスの否定 |
(縦線) | または |
* | 直前の1文字の0回以上の繰り返し |
+ | 直前の1文字の1回以上の繰り返し |
? | 直前の文字の0回または1回だけの登場を表現 |
( )(小括弧) | 一つのまとまり、グループ |
\ | メタキャラクタの意味の打ち消し |
またperlでは以下も使えます。
ルール | 意味 |
---|---|
\s | 空白文字1文字 |
\w | 英数字または「_」のうち1文字 |
\d | 数字1文字 |
具体例
^abc の場合は、文頭がabcいづれかを指します。
[a-c][abc] は、同じ意味で、半角のaからcまでのいづれか1文字とマッチします。
abc+ は、 abcの1回以上の繰り返しにマッチするため,ab にはマッチしません。
abc abcc abccc などにマッチします。
abc* は、 abcの0回以上の繰り返しにマッチするため
ab abc abcc abccc abccccなどにマッチします
abc? は、 1回だけを表現するため、ab abc にしかマッチしません
「^0-9」 は、[]で半角数字以外の任意の1文字にマッチ、^でクラスの否定なので
「半角数字以外の1文字」とマッチします。abcや漢字やひらがなもマッチします。
(abc)+ は、abcをグループとし、1回以上の繰り返しにマッチするため
abc abcabc abcabcabc などとマッチします。
実践編(数字)
少しわかりづらいので
バリデーションでよく使うものを見ていきましょう。
全て数値(半角)
/^[0-9]+$/
文頭から半角数字の0-9までのいづれか1文字(^[0-9])を
1回以上の繰り返しで文末まで(+$)となるため、
全て半角の数字にマッチします。
全て数値(全角,半角)
/^[0-90-9]+$/
全角と半角の両方の数字をマッチさせたい場合は
[]のなかに全角と半角の全ての数字を入れ([0-90ー9])
文頭(^)から文末($)まで1文字ずつ繰り返し行うこと(+)でマッチできます。
半角アルファベット(大文字・小文字・数値)
/^[a-zA-Z0-9]+$/
さらに半角アルファベットも加えたい場合はこのようになります。
電話番号(ハイフンなし10桁)
/^\d{10}$/
数字1文字を10文字分(\d{10})という形になります。
e-mailの場合
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
いきなり難しくなったって?
そんなことはありません。
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+
@[a-zA-Z0-9-]+
(?:\.[a-zA-Z0-9-]+)*$/
このように3つに分解することができ、
この意味正規表現の意味は、「何かしらの文字**@英数字.**英数字」です。
最初の[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+は全ての文字を表し、
@以降は、英数字の繰り返し([a-zA-Z0-9-]+)
.以降は、英数字の繰り返し([a-zA-Z0-9-]+)を(?:)でクループ化し、*$で文末まで指定しただけです。
.を入力する際には、打ち消しとして
バックスラッシュ\を入れる必要があるので(.)複雑に見えてしまうんですね。
まとめ
正規表現の見方について、まとめてみましたが、 実際には、様々な数字や文字が入ることもあるので、 下記サイトのようなもので、最終チェックをした方がよさそうです。