/\A[a-zA-Z0-9]+\z/
という正規表現で半角英数字のみのチェックを行いたいのですが、ハイフンやその他の記号も許容してしまいます。
これはなぜなのでしょうか?
またアルファベットと数字のみ許容する正規表現はどのように書けばよいのでしょうか?
よろしくおねがいします。
VALID_PASSWORD_REGEX = /\A[a-zA-Z0-9]+\z/.freeze validates :password, format: { with: VALID_PASSWORD_REGEX, message: 'パスワードの形式が間違っています。半角英数字で入力してください。' }
正規表現自体は合っていると思います。使い方が間違ってるんじゃないでしょうか?
どういった場面で正規表現を利用していますか? 当該部分のコードは公開可能ですか?
railsのバリデーションで使おうと思っています。
ソースの一部を質問本文に記載します。
https://www.cotegg.com/blog/?p=2436
ほぼ同じコードがここにあり、問題なく動いているようです。
つまり、問題があるのは質問に掲載されたコード部分ではありません。他の部分です。
もはや正規表現の質問ではないので、問題を見直して質問を書き直してください。
なんと!
では別の部分を見直してみます。
ありがとうございます。
もしかしたらこのプロジェクトではDeviseというGemを使っており、このモデル内でvalidatableを設定しているのでそのせいかもしれません。
与えたデータとその検証結果は質問欄に追記可能ですか?
例:
user = User.new
user.password = 'エラーになる値'
p user.validate
user.password = 'correctValue'
p user.validate
(必要であれば他のパターンも記述)
エラーになる値(!@#%&aaaaa)をいれたらtrueでした。正しい値でも同じく。
やはりGemでバリデーションを行っていて、モデルに記載されているバリデーションはすべて無視されているのですかね。。。
てかひらがなでも通りました
可能性の話ですが
パスワードが検証時にはハッシュ文字列になっているのかもしれませんね