よく使う正規表現テンプレ8選 ― メール・URL・電話番号などのバリデーション
メール・URL・電話番号・郵便番号など、フォームバリデーションでよく使う正規表現テンプレを8パターン収録。コピペで即使えます。
「メアドの正規表現どう書くんだっけ…」とググって、いろんな記事を見比べて疲れて、結局よく分からないままコピペする…これ、自分も毎回やってます(- -;
そこで「もう探さなくて済むように」と思って、用途別の実用パターンをここに集約しました。
気をつけたいポイントは下記。
- 言語によって書式が違う(JS、Python、PHPで少しずつ)
- 完璧を目指さない(メアドの「真の正規表現」は数千文字あります)
- 正規表現だけに頼らない(最終的にはサーバーサイドでも検証)
下記テンプレはどれもJavaScript想定ですが、他言語でもほぼそのまま動くので、必要に応じて調整してください!
1. メールアドレス(実用レベル)
用途: フォームでメールアドレスのフォーマットチェック
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
メアド正規表現は 「実用レベル」と「完璧」を分けて考えるのが大事。
RFC準拠の完璧な正規表現は数千文字あるので、個人サイトや簡易フォーム用途では上記くらいで十分です。
ちなみに自分が以前、独自正規表現でゴリゴリ判定するフォームを作ったら、+ 付きの Gmail([email protected])を弾いてしまって本物の問い合わせメールを取り逃した、という痛い経験があります。最終チェックはメール送信して確認するのが結局確実なんですよね(^^;
2. URL(http/https)
用途: テキスト中のURLを検出したり、入力されたURLをチェックするとき
/^https?:\/\/[^\s/$.?#][^\s]*$/
上記は http または https で始まるURLを判定する実用パターン。
ftpや独自スキームまで対応したい場合は https? を [a-z]+ に拡張してください。
なお厳密なURLバリデーションは new URL(str) で try/catch する方が確実です。正規表現はあくまで簡易チェック用ですね(^^!
3. 日本の電話番号(ハイフン有無対応)
用途: 携帯・固定電話のチェック
/^0\d{1,4}-?\d{1,4}-?\d{4}$/
日本の電話番号は **「先頭0 + 数字 + ハイフン任意」**で大体カバーできます。
フリーダイヤルや国際電話まで対応したい場合は、別途分岐させた方が読みやすいです(^^;
4. 日本の郵便番号
用途: 7桁の郵便番号を、ハイフンあり/なしで両対応
/^\d{3}-?\d{4}$/
郵便番号は 3桁+4桁のフォーマット固定。
入力時にハイフンを自動補完するならフォーム側で対応、検証だけなら上記でOKです(^^b
5. パスワードの最低限フォーマットチェック
用途: 大文字・小文字・数字を含む8文字以上のパスワードフォーマットを検証
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/
先読み(?=) を使って「全条件を満たすか」をチェックするパターン。
末尾を .{8,} にしてあるので、記号や日本語パスフレーズもそのまま通せます。
逆に「使える文字種を ASCII+記号に限定したい」場合は [A-Za-z\d!@#$%^&*]{8,} に置き換えてください(^^b
6. 日付(YYYY-MM-DD)
用途: ISO形式の日付文字列を判定
/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
ISO日付は **「2026-05-24」**のような形。
月と日のレンジまでチェックしてあるので「2026-13-99」のような不正値は弾けます。
ただし「2026-02-30」のようにカレンダー上存在しない日付はすり抜けるので、最終的には new Date() で再検証するのが安全ですね(^^b
7. IPv4アドレス
用途: IPアドレスの形式チェック
/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})$/
IPv4はオクテット(0-255)の範囲までチェックしてあります。
「999.999.999.999」みたいな不正なIPはちゃんと弾けるので、入力チェックに使えますね(^^!
8. ハッシュタグ(日本語対応)
用途: SNS投稿などからハッシュタグを抽出
/#[a-zA-Z0-9_-ヿ㐀-䶿一-鿿]+/g
日本語のひらがな・カタカナ・漢字(CJK統合漢字)を範囲指定して、g フラグで全マッチ。
Unicode範囲指定がポイントで、これがあると日本語ハッシュタグも拾えます(^^b