正規表現:いくつかの文字列をひとつの形式で表現したもの
バリテーションによく使う関数はpreg_match ( $pattern, $subject);。$subjectに$pattern(正規表現)が含まれていたら1、含まれていなかったら0, エラーならFALSEを返す。
書き方
‘/正規表現/’ と「’/」で囲う。スラッシュはデリミタ(区切りを表す記号)であり、~や#、@でもよい。
→ ’#正規表現#’ や ’@正規表現@’ も正しい。
正規表現を使ったバリテーション
前提条件:バリテーションで全ての間違いを引っ掛けるのは難しい。特にメールアドレスはかなり複雑になる。例えばgmailは先頭や@の前のドットを許容するけど、yahooはしない。どこかで見切りをつける必要がある。
郵便番号と電話番号はハイフンの有無でパターンが変わるのが面倒。事前に対象文字列からハイフンを抜いたり工夫すると良い。str_replaceで削除できる。
str_replace('-', '', 対象の文字列);
郵便番号
「3桁の数字 – 4桁の数字」のバリテーション(勉強のために、あえてハイフンありのバリテーションを書いてます。)
$str = "対象の文字列":
if (!preg_match('/^[0-9]{3}-[0-9]{4}$/', $str)) {
print '郵便番号が正しくありません';
};
- ^:最初の文字列にマッチ
- [0-9]:半角数字の0から9いずれかにマッチ
- {3}:3回続く
- -:ハイフンそのもの
- $:文字列の最後にマッチ
「7桁の数字」のバリテーションだったらこうですね。
preg_match('/^[0-9]{7}$'/, 任意の文字列);
電話番号
「先頭が0かつ10文字または11文字の半角数字」のバリテーション
$str = "対象の文字列":
if (!preg_match('/^0\d{10-11}$'/, $str)) {
print '電話番号が正しくありません';
};
- ^:最初の文字列にマッチ
- 0:数字のゼロそのもの
- \d:半角数字の0から9いずれかにマッチ。[0-9]と同じ
- {10-11}:10回か11回続く
- $:文字列の最後にマッチ
メールアドレス
複雑なので、前提条件を定めてそれに合うバリテーションを書く
- 使用可能:半角英数字。記号は「.」「-」「_」だけ。
- @がひとつだけあること
つまり、先頭や@前のドットも許容するゆるいバリテーションです。そうしないと弾かれるgmailも出てくるので。
$str = "対象の文字列":
if (!preg_match('/^[a-zA-Z0-9-_\.]+@[a-zA-Z0-9-_\.]+$'/, $str)) {
print 'メールアドレスが正しくありません';
};
- ^:最初の文字列にマッチ
- [a-zA-Z0-9-_\.]:半角英数字または「.」「-」「_」にマッチ
- +:直前の項目を1回以上繰り返す
- @:@そのもの
- $:文字列の最後にマッチ
コメント