Проверка HTML5 не перехватывает '...' - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть регулярное выражение для проверки формата имени.Вы можете видеть это здесь .Это регулярное выражение не соответствует ....Но в браузере это каким-то образом разрешено проверкой на стороне клиента, и только при проверке на стороне сервера.

Просмотр

module ApplicationHelper
  class ActionView::Helpers::FormBuilder
    include ActionView::Helpers::FormTagHelper
    include ActionView::Helpers::FormOptionsHelper

    def name_field(name, options = {})
      validation_options = {
        pattern: "^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ ',.-]+$",
        oninvalid: "setCustomValidity('Contains unsupported characters.')",
        oninput: "setCustomValidity('')"
      }
      text_field name, validation_options.merge(options)
    end
  end


<%= f.name_field :last_name, class: 'form-control', placeholder: 'Last Name', required: true, maxlength: 50 %>

Проверка модели

  NAME_FORMAT = /^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ ',.-]+$/

  def name_is_acceptable
    [:first_name, :last_name].each do |attr|
      value = self.send(attr)
      next if value.blank? || value =~ NAME_FORMAT

      errors.add attr, I18n.t(:resident_name_invalid, scope: 'errors.messages')
    end
  end

1 Ответ

1 голос
/ 29 апреля 2019

Ваше регулярное выражение в двойных кавычках, поэтому \ экранирование обрабатывается ruby ​​(и игнорируется, так как символы после этого не являются специальными), в то время как они должны идти в регулярное выражение в браузере.

Использование:

pattern: '^(?!.*\.\S)[a-zA-Z àâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞąćęłńóśźżĄĆĘŁŃÓŚŹŻìíòúÌÍÒÚáñÁÑ \',.-]+$'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...