Skip to content

Instantly share code, notes, and snippets.

@nashirox
Last active April 7, 2024 08:07
Show Gist options
  • Save nashirox/38323d5b51063ede1d41 to your computer and use it in GitHub Desktop.
Save nashirox/38323d5b51063ede1d41 to your computer and use it in GitHub Desktop.
Rubyのバリデーション用正規表現集
#
# 数字
#
# 全て数値(全角)
/\A[0-9]+\z/
# 全て数値(半角)
/\A[0-9]+\z/
# 全て数値(全角,半角)
/\A[0-90-9]+\z/
# 全て全角数値(マイナス、小数点)
/\A[ー]?[0-9]+(\.[0-9]+)?\z/
# 全て半角数値(マイナス、小数点)
/\A[-]?[0-9]+(\.[0-9]+)?\z/
#
# 文字
#
# 半角アルファベット(小文字)
/\A[a-z]+\z/
# 半角アルファベット(大文字)
/\A[A-Z]+\z/
# 半角アルファベット(大文字・小文字)
/\A[a-zA-Z]+\z/
# 半角アルファベット(小文字・数値)
/\A[a-z0-9]+\z/
# 半角アルファベット(大文字・数値)
/\A[A-Z0-9]+\z/
# 半角アルファベット(大文字・小文字・数値)
/\A[a-zA-Z0-9]+\z/
# 全角ひらがな
/\A[ぁ-んー-]+\z/
# 全角カタカナ
/\A[ァ-ヶー-]+\z/
# 全角ひらがな、カタカナ
/\A[ぁ-んァ-ヶー-]+\z/
# 半角カナ
/\A[ァ-ン゙゚]+\z/
# 漢字
/\A[一-龥]+\z/
# 全角ひらがな、漢字
/\A[一-龥ぁ-ん]/
# 全角ひらがな、全角カタカナ、漢字
/\A[ぁ-んァ-ン一-龥]/
# 全角ひらがな、全角カタカナ、漢字(鬼車)
/\A(?:\p{Hiragana}|\p{Katakana}|[ー-]|[一-龠々])+\z/
#
# 郵便番号
#
# 郵便番号(ハイフンあり3桁・5桁・7桁)
/\A\d{3}[-]\d{4}$|^\d{3}[-]\d{2}$|^\d{3}\z/
# 郵便番号(ハイフンあり5桁)
/\A\d{3}[-]\d{2}\z/
# 郵便番号(ハイフンあり7桁)
/\A\d{3}[-]\d{4}\z/
# 郵便番号(ハイフンなし3桁)
/\A\d{3}\z/
# 郵便番号(ハイフンなし5桁)
/\A\d{5}\z/
# 郵便番号(ハイフンなし7桁)
/\A\d{7}\z/
# 郵便番号(ハイフンあり・なし両方)
/\A\d{3}[-]\d{4}$|^\d{3}[-]\d{2}$|^\d{3}$|^\d{5}$|^\d{7}\z/
#
# 電話番号
#
# 電話番号(ハイフンなし10桁)
/\A\d{10}\z/
# 携帯番号(ハイフンなし11桁)
/\A\d{11}\z/
# 携帯番号(ハイフンなし10桁or11桁)
/\A\d{10,11}\z/
#
# その他
#
# e-mail
/\A\S+@\S+\.\S+\z/
# 日付 YYYY-MM-DD
/\A\d{4}-\d{2}-\d{2}\z/
# 時刻 24h
/\A([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\z/
# 時刻 12h
/\A(0[0-9]|10|11):[0-5][0-9]:[0-5][0-9]\z/
# URL
/\Ahttp(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/
# クレジットカード(VISA,Master,Diners,Discover,Amex対応)
/\A(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})\z/
@dyanagi
Copy link

dyanagi commented Mar 24, 2019

検索から来ました!参考にさせて頂きました。Railsのバリデーション用と書かれているので少し気になったのが ^$ は意図したものでなければ \A\z を使うのがより良いかもしれません。(Ruby独自ですが)

# 携帯番号(ハイフンなし10桁or11桁)
/^\d{10}$|^\d{11}$/ === "12345678901"
# => true

/^\d{10}$|^\d{11}$/ === "1234567890\n1234567890123"
# => true

### 修正案
/\A\d{10}\z|\A\d{11}\z/ === "12345678901"
# => true

/\A\d{10}\z|\A\d{11}\z/ === "1234567890\n1234567890"
# => false

### シンプルな書き方
/\A\d{10,11}\z/ === "12345678901"

@nashirox
Copy link
Author

nashirox commented May 24, 2019

@dyanagi ありがとうございます!メモ用にペロッと書いておいて放置していたのですが、意外に閲覧されていました(笑)のでご提案のように修正します!

@yuevo
Copy link

yuevo commented Jul 1, 2022

私も検索から来ました!非常に参考にさせていただいております、ありがとうございます。
1点気になったのが、半角カナの正規表現で「ヲ」が許容されずに弾かれてしまいます(例:カズヲ)
以下の正規表現だと問題なく動作することができたので共有させていただきます。

# 半角カナ(修正前)
/\A[ァ-ン゙゚]+\z/

# 半角カナ(修正後)
/\A[ヲ-゚]+\z/u

@scivola
Copy link

scivola commented Sep 27, 2022

[一-龥][一-龠] は一部の漢字しか拾えません。

こちらのページを元に
正規表現リスト - Qiita
という記事が書かれ,さらにそれを参考に
正規表現について - Qiita
という記事が書かれていたりして,この方法が拡散していくかもしれません。

\p{ } が使える正規表現エンジンなら \p{Han} が妥当かと思います。
使えない場合は悩ましいですが,せめて「CJK 統合漢字」「CJK 統合漢字拡張 A」「CJK 互換漢字」だけでもカバーして

[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]

とするとかですかね。これでも「𡈽」「𩸽」とか拾えませんが,拡張 H まで書くと長すぎて大変なので。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment