クライアントから送信された
フォームデータの検証
〜メールアドレス($_POST["email"])〜
- 基本的にこれでOK(既存のフィルターを使用する)
filter_var($_POST["email"], FILTER_VALIDATE_EMAIL);
※filter_var()は2009-3月以前に作成されたauやdocomoのアドレスは一部、RFC違反のためはじかれる。
- 文字列が正規表現にマッチするか(作成したフォーマットを使用する)
preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0- 9\._-]+)+$/", $_POST["email"]);
”^” 行頭から,
”([a-zA-Z0-9])+” a~z A~Z 0~9の中から1文字以上連続しその後
”([a-zA-Z0-9\._-])*” a~z A~Z 0~9 . _ - の中から0文字以上連続し
”@” @を挟んで、a~z A~Z 0~9が1文字以上連続する。
"$" 行末は、
a~z A~Z 0~9 . _ - の中から1文字以上連続した文字列である。
※RFC5322で定義されたメアドを完全に定義するのは難しい。上記のフォーマット以外にも様々な表現方法はあるが独自で作成したフォーマットの使用は現実的では無い。最新の有力なソースを検索、参照してください。
尚、文字コードがUTF-8以外の場合は、mb_ereg()を使用。
〜パスワード($_POST["password"])〜
- 文字列が正規表現にマッチするか
preg_match("/\A(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[a-zA-Z\d]{8,100}+\z/", $_POST["email"]);
"?=.*?[a-z]" a~zの中から0文字以上含む文字列
"?=.*?[A-Z]" A~Zの中から0文字以上含む文字列
"?=.*?\d" 0~9の中から0文字以上含む数字列 が
"{8,100}+" 8文字以上100文字未満連続する文字列
※正規表現の理解を深めるため、書き方をメールアドレスと変えている。