1 # frozen_string_literal: true
 
   3 class CharactersValidator < ActiveModel::EachValidator
 
   4   INVALID_CHARS = "\x00-\x08\x0b-\x0c\x0e-\x1f\x7f\ufffe\uffff"
 
   5   INVALID_URL_CHARS = "/;.,?%#"
 
   7   def validate_each(record, attribute, value)
 
   8     record.errors.add(attribute, options[:message] || I18n.t("validations.invalid_characters")) if /[#{INVALID_CHARS}]/o.match?(value)
 
   9     record.errors.add(attribute, options[:message] || I18n.t("validations.url_characters", :characters => INVALID_URL_CHARS)) if options[:url_safe] && /[#{INVALID_URL_CHARS}]/o.match?(value)