はじめに
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: マッチするか確認する
③モデルに実装する
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イベントで足すという方法を考えています。(ということはハイフンありの完全一致のバリデーションでもいいのでは?)