WHY
今日は正規表現で漢字、ひらがな、カタカナでのみ入力するというバリデーションの記述方法などを学んだのでアウトプットしていきます。
結果から言うと
VALID_NAME_REGEX =/\A[ぁ-んァ-ン一-龥々]+\z/
with_options presence: true do
validates :last_name, format: { with: VALID_NAME_REGEX, message: 'Full-width characters.' }
validates :first_name, format: { with: VALID_NAME_REGEX, message: 'Full-width characters.' }
end
でLGTMもらったのですが、
最初に提出した時は...
with_options presence: true do
validates :last_name, format: { with: /\A[ぁ-んァ-ン一-龥]/, message: 'Full-width characters.' }
validates :first_name, format: { with: /\A[ぁ-んァ-ン一-龥]/, message: 'Full-width characters.' }
end
こう書いてしまっていました、、、。
変数の定義は知らなかったということでさておき、正規表現においてはいま改めて見るとめちゃめちゃ恥ずかしい限りです、、、
正規表現の内容について
自分の書いた正規表現を前にも紹介したサイトで見てみます。
https://regexper.com/
Aは文字列の先頭と言う意味ですね。
そして末尾が指定されてません、これだと末尾に数字をいれても通ってしまいます...
なのでアンカーの「\z」を付け足します。
これで末尾をつけることができましたが、まだこのままだと中の箱の中は一回しか役割を果たしません、これを繰り返すのに「+」をつけます。
これで文頭から末尾まで適応されます。
ですがこのままだと全国の佐々木さんに謝らなければいけなくなるので「々」という字も足します。
これで佐々木さんが入力できます!
バリデーションの記述について
これで無事に漢字、ひらがな、カタカナで入力させることができましたが、
バリデーションでは同じ正規表現を複数回記述する場合、変数化してまとめることが推奨されるらしいです。
上のwithオプションの表現は全く同じものを2回繰り返しているので変数化します。
VALID_NAME_REGEX =/\A[ぁ-んァ-ン一-龥々]+\z/
あとはwithオプションにこの変数を使っていけば問題なくバリデーションできます。
正規表現の感覚がまだつかめていないですけど少しずつ学んでいけたらなとおもいます。