3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(PHP)入力チェックを行うためのいろいろな正規表現

Webで入力された情報のチェックを行うための正規表現のまとめです。

ちなみに、こちらのサイトでオンラインで正規表現のチェックができます。
簡単に評価できるので非常に助かってます。

カタカナ(全角)入力

preg_match( '/[ァ-ヶ]+/',$text )

このァかヶの範囲は文字コード表を見るとわかります。
※追記
この方法だとうまくいきませんでした。
ということで、mb_eregを使って、こういう方法で。

mb_regex_encoding("UTF-8");
mb_ereg( "^[ァ-ヶ]+$" , $message );

参考:全角カタカナにマッチする正規表現

※さらに追記(2008/11/11)
cakePHPのバリデーションでは上の方法でうまくいかない場合がありました。
それでこちらを参考に下記のようにしたらうまくいきました。

/^(?:\xE3\x82[\xA1-\xBF]|\xE3\x83[\x80-\xB6])+$/



メールアドレス
正確にはメールアドレスに完全に一致する正規表現は無いようです。(特に携帯電話キャリヤやプロバイダによってはRFCに定義されてないメールアドレスも許可してるところもあるようで。。)

かといって何でもOKにするのはまずいので大まかなチェックはさせないとだめですね。

ということでこちらを参考にOSSPEARのメールチェック正規表現を参考にさせてもらいました。

preg_match("/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/", $text )



電話番号チェック(-付)
こちら参考にまず一般電話の正規表現

preg_match( "/^(0(?:[1-9]|[1-9]{2}\d{0,2}))-([2-9]\d{0,3})-(\d{4})$/" , $message )

(これだけだと桁数に関係なく入力できてしまうので、番号の計が10桁の確認が別途必要なるようです。)
そして、携帯電話の正規表現

preg_match( "/^0[57-9]0-\d{4}-\d{4}$/" , $message )

これは比較的シンプルですね。

郵便番号チェック(-付)

preg_match( "/^[0-9]{3}-[0-9]{4}$/" , $message )

これもシンプルです。
参考:郵便番号をチェックする正規表現


なお、PHPUTF-8環境下で正規表現を行うには「mb_ereg」じゃなくて「preg_match」を使うのが吉といことがmb_eregよりもpreg_matchがいいの?に書かれていましたので注意しましょう。mb_eregでも、mb_internal_encoding、mb_http_output、mb_regex_encodingをUTF-8に指定すればうまくいくことがコメント欄にかかれてました。時間あれば実際に評価してみたいとおもいます。(当分難しいでしょうが。。)