正規表現を使ったバリテーション

正規表現:いくつかの文字列をひとつの形式で表現したもの

バリテーションによく使う関数は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回以上繰り返す
  • @:@そのもの
  • $:文字列の最後にマッチ

コメント

タイトルとURLをコピーしました