アプリを開発する上で、文字や数字の妥当性をチェックする際に欠かせないのが正規表現。
今回はPHPとJavaScriptの共通で使える、一般的なエラーチェック用の正規表現をまとめました!
正直、正規表現っていくら説明されても何かの暗号のようでなかなか理解できません。
こうなったら、よく使う正規表現をコピペですぐ利用できるようにしておこう!って話ですw
フォームでよく使う正規表現
正規表現でのエラーチェックは、プログラマーにとっていつも悩みの種です。
それは、入力フォームが作りて側の要望によってそれぞれ違うからです。
例えば、あるサイトは全角OKなのに別のサイトはダメとか、電話番号のハイフンの有無とか、郵便番号の入力欄が上3桁と下4桁で分かれてたりくっ付いたりなど。
全世界とは言わないが、せめて日本全国で統一してほしい。
ありがたいことに、そんな痒いところに手を届かせてくれるサイトが複数ありますので、そちらを参考に少しだけ応用をします。
参考サイト
form用正規表現判定/備忘 – Qiita
そのまま使える正規表現集 for regExp (javascript) | 素人ときどき玄人
jQuery-Validation-Engine/jquery.validationEngine-ja.js at master · posabsolute/jQuery-Validation-Engine · GitHub
正規表現の応用編
我が国のエラーチェックで最も厄介なものは、日本語(2バイト文字)を扱うこと。
英語圏だと、アルファベット、数字、記号くらいで事足りますが、全角文字で倍になり、ひらがな、カタカナ、漢字がプラスされます。
PHP・JavaScript兼用の正規表現一覧
それでは、今後の作業を少しでも楽にするために、入力フォームのエラーチェックでよく使う正規表現を、PHPとJavaScriptの両方でそのままコピペして使えるように一覧でまとめました!
半角英数記号
1 |
/^[a-zA-Z0-9!-/:-@¥[-`{-~]+$/ |
全半角英数字+ひらがな・カタカナ・漢字
1 |
/^[a-zA-Za-zA-Z0-90-9ぁ-んァ-ヶ一-龠]+$/u |
0から始まる10~11桁でハイフン無しの電話番号
1 |
/^0/?([0-9]{9,10})$/ |
国際電話も含めたハイフンの有無を問わない電話番号
1 |
/^([+][0-9]{1,3}[ .-])?([(]{1}[0-9]{2,6}[)])?([0-9 .-/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/ |
メールアドレスをもっと厳密に
1 |
/^((([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+(.([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+)*)|((x22)((((x20|x09)*(x0dx0a))?(x20|x09)+)?(([x01-x08x0bx0cx0e-x1fx7f]|x21|[x23-x5b]|[x5d-x7e]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(\([x01-x09x0bx0cx0d-x7f]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))))*(((x20|x09)*(x0dx0a))?(x20|x09)+)?(x22)))@((([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).)+(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).?$/i |
URLをもっと厳密に
1 2 |
/^(https?|ftp)://(((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:)*@)?(((d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]).(d|[1-9]d|1dd|2[0-4]d|25[0-5]))|((([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).)+(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).?)(:d*)?)(/((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)+(/(([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)*)*)?)?(?((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)|[uE000-uF8FF]|/|?)*)?(#((([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(%[da-f]{2})|[!$&'()*+,;=]|:|@)|/|?)*)?$/i |
区切り文字がスラッシュとハイフン両対応の日付
1 |
/^d{4}[/-](0?[1-9]|1[012])[/-](0?[1-9]|[12][0-9]|3[01])$/ |
IPv4アドレスかどうか
1 |
/^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/ |
正規表現まとめ
ここまで紹介し正規表現は、以前紹介したjQuery Validationプラグインでカスタムバリデーションを追加する際にも有効です。
正規表現は同じ動きをしても書き方が異なる場合があります。
例えば、w
で半角英数字(とアンダーバー)を表したり、d
で半角数字([0-9])を表すメタ文字として定義されています。
こんな書き方もあるよ!もっとスマートに書けるよ!という意見があればコメントください。
コメント