2020/10/21更新
結論
以下を利用した。
####with_options
条件付きバリデーションをグループ化できる。do endで囲って使用する。
####presence: true
空でないことを確認する。
####format:
withオプションに記述した正規表現が送られた値とマッチしているか検証する。
####/\A[ぁ-んァ-ン一-龥]+\z/
Unicodeにおける範囲でひらがな、カタカナ、漢字と一致しているか調べる。これらでは不完全だが、一般的な日本人用としては十分だと思われる。
追記
ゔまで含めたければ、[ぁ-ゔ]
ヴまで含めたければ、[ァ-ヴ]
https://qiita.com/kokorinosoba/items/78811d7e2b6bc424b1b1
漢字の抜け漏れを無くしたい場合には[\p{Han}]
※\P{Han} は漢字以外だそうです。
日本語中国語韓国語ベトナム語の感じ全てを含めたい場合には[\p{Ideographic}]
です。
使い方は数字の[\d]と同じように[a-z\p{Han}]のように使えます。
####/[a-z\d]{6,}/i
大文字小文字可能で、英字もしくは数字6文字以上であるか確認する。
これはアルファベット(大小問わず)または数字が6文字以上含まれているかチェックするもの。
英字かつ数字が必ず含まれているかチェックするには以下の表現が必要。
\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i
?=はそれ以降の文字列の中から[a-z]があるかを調べる。という意味。
これがないと先頭の文字1文字をみて判断してしまう。
理解が進んだら更新します。
{6,20}とすれば6文字以上20字いないと指定できる。
message
ここにエラーの時に出るメッセージを記述する。
不足しているコード
with_options presence: true, format: { with: /\A[ぁ-んァ-ン一-龥]+\z/, message: 'に全角文字を使用してください' } do
validates :family_name
validates :first_name
end
validates :password, format: { with: /[a-z\d]{6,}/i, message: "は6文字以上の英数字が使えます" }
end
十分なコード
with_options presence: true, format: { with: /\A[ぁ-ゔァ-ヴ\p{Ideographic}a-zA-Z0-9]+\z/, message: 'に全角文字を使用してください' } do
validates :family_name
validates :first_name
end
validates :password, format: { with: /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i, message: "は6文字以上かつ英数字をそれぞれ含めてください" }
end
全角のバリデーション結果
英数混合必須
参考文献
Railsガイドのformatヘルパーの欄をご覧ください。
https://railsguides.jp/active_record_validations.html
基本的な正規表現一覧
https://murashun.jp/blog/20190215-01.html
runyの正規表現チェッカー
https://rubular.com/