リファレンス
正規表現パターン集
コピペできる定番パターン集は世に多いですが、ここは「なぜこう書くか(部品の意味)」と「この式では足りない場面」を必ず併記します。 正規表現の事故は、たいてい限界を知らずにコピペしたときに起きるからです。 その場で自分の文字列を当てて確かめられます。
18 件
「@が1つあり、前後に空白でない文字があり、ドメインにドットがある」だけを見る割り切った検証。
/^[^\s@]+@[^\s@]+\.[^\s@]+$/httpまたはhttpsで始まる、空白を含まないURLらしき文字列。
/^https?:\/\/[^\s/$.?#].[^\s]*$/各オクテットを0〜255に厳密制限したIPv4。範囲チェックまで正規表現で行う代表例。
/^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$/3桁+ハイフン(省略可)+4桁。
/^\d{3}-?\d{4}$/0で始まる、ハイフン任意の国内電話番号。市外局番の桁数が地域で違うため、あえて緩くする。
/^0\d{1,4}-?\d{1,4}-?\d{3,4}$/月01〜12・日01〜31の形式チェック。
/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/小文字・大文字・数字・記号をそれぞれ含む12文字以上。先読み(lookahead)を並べる定番の型。
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).{12,}$/バージョン4のUUID。version と variant のビットまで見る。
/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i3桁短縮形と6桁形。#は任意。
/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i「<から>まで」を消す、よく見かける手抜きタグ除去。
/<[^>]*>/gグループに名前を付けて取り出す。番号($1, $2)より壊れにくく読みやすい。
/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/円記号の直後にある数字だけを取り出す(円記号自体は結果に含めない)。
/(?<=¥)\d+/g行頭または行末の連続空白にマッチさせ、空文字に置換する。
/^\s+|\s+$/g2つ以上並んだ空白・改行・タブを、半角スペース1つに潰す。
/\s+/g英小文字と数字以外をハイフンに置換して、URLに使える文字列にする。小文字化と前後ハイフン除去は別途行う。
/[^a-z0-9]+/gひらがな・カタカナ・常用的な漢字・々・長音符のみで構成されるか。
/^[\u3041-\u3096\u30A1-\u30FA\u4E00-\u9FFF\u3005\u30FC]+$/コードポイント範囲を手書きせず、Unicodeの定義でひらがな判定する。u フラグが必須。
/^\p{Script=Hiragana}+$/u書いてはいけない形の代表。繰り返しの中に繰り返しがあり、失敗時のバックトラッキングが指数的に爆発する。
/^(a+)+$/コピペ前に思い出したい3つ
- 正規表現は「形式」しか見ない:日付の形が合っていても2月30日は通る。メールの形が合っていても届くとは限らない。実在確認は別の手段で。
- 構造のあるものをパースしない:HTML・JSON・CSVは専用パーサへ。正規表現でのHTML処理はサニタイズ目的だと脆弱性になる。
- 入れ子の繰り返しを書かない:
(a+)+型はReDoSで固まる。ユーザー入力に当てる式は特に。