Rails - REGEX - проверка длины непробельных / специальных символов - PullRequest
0 голосов
/ 29 января 2019

У меня есть несколько полей с проверкой длины, которые можно обойти, введя n пробелов.Я пытаюсь написать метод, который проверяет только количество буквенно-цифровых символов (без пробелов или специальных символов).

Я получил следующее:

 validates :title,
            presence: true,
            length: { minimum: 4, maximum: 140 },
            format: { with: /([A-z0-9])/ }

То, что я не могу получить, это как проверить длину заголовка, который соответствует формату.Например, я хочу разрешить заголовок «The Beast», но в подсчете символов учитывается только «TheBeast».Это позволит «Зверю» и включит пробел в проверку длины

Есть ли что-то встроенное в рельсы, которое позволяет мне это делать?Или, если нет, как лучше написать собственный метод?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Чтобы расширить ответ @ NeverBe, я выбрал:

class AlphanumericLengthValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    minimum_length = options.fetch(:length, 100)
    stripped_value = value ? value.gsub(/[^0-9a-zA-Z]/, '') : nil
    message = "must be at least #{minimum_length} alphanumeric characters in length"
    return if stripped_value&.length && stripped_value.length >= minimum_length
    record.errors.add(attribute, message) if !stripped_value || stripped_value.length < minimum_length
  end
end

Что позволило мне сделать:

  validates :title, alphanumeric_length: { length: 8 }
0 голосов
/ 29 января 2019

если бы у вас был столбец aux наподобие 'Filter_title', вы могли бы сделать:

before_save :filter_title

def filter_title
  self.filtered_title = title.gsub(/[^0-9a-zA-Z]/, '') // strip unneeded chars
end

и ваш валидатор, но для нового столбца

 validates :filtered_title,
            presence: true,
            length: { minimum: 4, maximum: 140 },
            format: { with: /([A-z0-9])/ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...