kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Rails で全角文字を禁止するカスタムバリデータ

フォームで全角文字の入力を禁止したいなーと考えてて,最初は format: { with: } で正規表現を書いてみたんだけど,記号の部分を網羅するのが面倒で微妙だった.

ascii_only?

ascii_only? (String) - APIdock

判定できそう!

pry(main)> 'abc'.ascii_only?
=> true
pry(main)> 'あああ'.ascii_only?
=> false

カスタムバリデータにしてみた

カスタムバリデータとして app/validators/ascii_only_validator.rb を書いてみた.良さそう.

class AsciiOnlyValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    if value.present? && !value.ascii_only?
      record.errors[attribute] << I18n.t('validators.ascii_only')
    end
  end
end

モデル側で指定するのはこんな感じ.

validates :hoge, ascii_only: true

まとめ

実現方法は他にもあると思うけど,候補の1つとして.

Thank you @nysalor !