Подсчет слов в проверке рельсов
Я использую следующую проверку для подсчета слов в 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 }