Подсчет слов в проверке рельсов

Я использую следующую проверку для подсчета слов в rails (я получил пример из документации по Rails), но это не совсем точно:

validates :body, :length => {
    :minimum   => 50,
    :maximum   => 300,
    :tokenizer => lambda { |str| str.scan(/\w+/) },
    :too_short => "must have at least %{count} words",
    :too_long  => "must have at most %{count} words"
  }

Пользователь попытался опубликовать что-то, что составляет 291 слово (это количество, которое дает Word), и оно было отклонено слишком долго. Я не знаю точно, что не так с используемым выражением или что может быть хорошим выражением для обеспечения точного подсчета слов.

2 ответа

Решение

Вместо поиска для \ \w+/ следует искать /\s+|$/ и уменьшить максимальное значение на единицу, так как совпадение символов \ w может быть неожиданным для необычных символов, поскольку допустимы только A-Za-z0-9_-.

Ты можешь попробовать:

:tokenizer => lambda { |str| str.split }
Другие вопросы по тегам