はじめに
Railsのパスワード設定で保存する際に、
「半角のアルファベットと半角数字が混合でなければならない」場合の
バリデーションを設定する方法について解説します。
※今回はpassword属性に対してバリデーションを実行します。
結論
validates :password, format: {
with: /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i,
message: 'は英数字の混合である必要があります'
},on: :create
Userモデルに上記の記述を追加する事で、半角英数混合の
バリデーションを設定することが出来ます。
※今回はon: :create
を指定していますが、合わせて解説していきます。
解説
validates :属性の名前, format: {
1行目では、validatesでバリデーションを設定する属性の名前を指定します。
今回設定する属性はpassword属性
です。
また、format:オプションで正規表現にて特定のパターンについて
合致するか確認してくれます。
with: /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i,
2行目では、with:オプションにて正規表現パターンを指定する事が出来ます。
/\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i,
の部分が正規表現になります。
上記正規表現により、password属性
の値が英字と数字の組み合わせであるかを
チェックしてくれます。
message: 'は英数字の混合である必要があります'
3行目では、message:オプションにてバリデーションが失敗した時に
表示されるエラーメッセージをしています。
},on: :create
4行目のon: :create
を設定することでcreateアクションの時のみ
バリデーションが実行されるよう制限することが出来ます。
つまり、既存のレコードの更新時などにはバリデーションは
実行されないという形になります。
補足(正規表現について)
正規表現については知識が浅い為、解説できませんでしたが、
正規表現のチェックを行なってくれるRubularというサイトがあるので
興味がある方は覗いてみて下さい!