Встроенная форма Ruby - проверка электронной почты с конкретным доменом - PullRequest
0 голосов
/ 25 марта 2019

Я создаю встроенную форму Ruby, и я хотел бы, чтобы проверка позволила разрешить 9 символов перед началом, но специально начиная с 'x', поэтому x12345678@a2z.ie будет действительным электронным письмом, а 12345678@a2z.ieне будет действительным.

a2z.ie является доменом и требуется.

У меня есть код REGEX: x+\d{8}+@a2z.ie

У меня есть следующий код:

  <div class="form-group">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email", :class => 'form-control', :validation => 'x+\d{8}+@a2z.ie' %>
  </div>

Я знаю, что этот код неверен, потому что он по-прежнему разрешает почту любого пользователя.

1 Ответ

0 голосов
/ 25 марта 2019

Вместо этого использовался Ruby-файл валидатора электронной почты.

Также используйте Devise, если это поможет.

В user.rb добавьте:

validates :email, :presence => true, :email => true

Создание папки validators в моделях. Затем создайте email_validator.rb в указанной папке и добавьте в него:

(приложение / модели / валидаторы / email_validator.rb):

require 'mail'
class EmailValidator < ActiveModel::EachValidator
    def validate_each(record,attribute,value)
        begin
            m = Mail::Address.new(value)
            # We must check that value contains a domain, the domain has at least
            # one '.' and that value is an email address  
            r = m.domain.present? && m.domain.match('\.') && m.address == value
            s = m.domain.present? && m.domain.match('\@a2z.ie') && m.address == value

            # Update 2015-Mar-24
            # the :tree method was private and is no longer available.
            # t = m.__send__(:tree)
            # We need to dig into treetop
            # A valid domain must have dot_atom_text elements size > 1
            # user@localhost is excluded
            # treetop must respond to domain
            # We exclude valid email values like <user@localhost.com>
            # Hence we use m.__send__(tree).domain
            # r &&= (t.domain.dot_atom_text.elements.size > 1)
        rescue
            r = false
        end
        record.errors[attribute] << (options[:message] || "is invalid. Please enter xEMPLOYEENUMBER@a2z.ie, e.g. x12345678@a2z.ie") unless (r && s)
    end
end

Это было не совсем то, что я хотел, но немного.

Ссылка: https://github.com/plataformatec/devise/wiki/How-to:-Use-a-custom-email-validator-with-Devise

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...