LoginSignup
4
3

More than 1 year has passed since last update.

【Ruby on Rails】郵便番号にバリデーションをかけたい!【正規表現】

Last updated at Posted at 2021-05-13

はじめに

Ruby on Railsの学習中です。携帯番号は下記の参考文献と出会えたので解決しましたが、正規表現で郵便番号にいい感じのバリデーションをかけたいと思ったのですが、なかなかベストな文献が見当たりませんでした。そこでこちらの文献を参考に郵便番号正規表現を作成しました。

参考文献

テストするならココ

今回の理想

  • 郵便番号は以下ならOKとします。
    • 000-0000(数字7桁と間にハイフンが含まれる)
    • 0000000(数字7ケタのみ)

テスト環境

  • Rails 5.2.5
  • ruby 2.6.3

①正規表現を作る

郵便番号の正規表現

\A\d{3}[-]?\d{4}\z

これで\Aから始まり\zに終わる\d{3}3桁と\d{4}4桁の数字で[-]?間にハイフンが入っていても入ってなくてもOK
という意味になります。

②正規表現を試す

rubular.comに移動
①Your regular expression:に先ほどの正規表現を記載する
②Your test string:にテストしたい文字列を入れる
③Match result: マッチするか確認する

③モデルに実装する

models/user.rb

  VALID_POSTAL_CODE_REGEX = /\A\d{3}[-]?\d{4}\z/ #正規表現を//で/正規表現/とサンドすることを忘れないよう
  validates :postal_code, presence: true, format: { with: VALID_POSTAL_CODE_REGEX }

以上で実装できました。
正規表現はPHP: preg_match() で何回か触れたことはありましたが、すぐ忘れるし、まだまだゼロから手書きはできません...
何かから見て学び、応用を効かせて、rubular.comで試すというルーティンで今後も正規表現と向き合って行こうと思います!
ちなみにハイフンの有り無しはDB上では統一したいのでjavascriptのinputイベントで足すという方法を考えています。(ということはハイフンありの完全一致のバリデーションでもいいのでは?)

4
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3