Classes for attributes validation
By creating a base class and then inheriting from it, you end up with no duplication and with an architecture that can be easily extended.

I don't think that you should bother having valid? as protected. Calling valid? from outside is a common use case and doesn't violate encapsulation.

class Validator &lt; ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    message = options.fetch(:message, I18n.t('errors.attributes.name.invalid'))
    record.errors[attribute] &lt;&lt; message unless self.valid?(value)
  end

  def self.valid?(value)
    raise NotImplementedError
  end
end

class NameValidator &lt; Validator
  def self.valid?(value)
    value =~ /\A[a-z][\w\p{Blank}]+\z/i
  end
end

class EmailValidator &lt; Validator
  def self.valid?(value)
    value =~ /\A.+@.+\..+\z/i
  end
end