计算rails验证中的单词

Sli*_*k23 4 regex ruby-on-rails

我正在使用以下验证来计算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"
  }
Run Code Online (Sandbox Code Playgroud)

一个用户试图发布一个291个单词的东西(这是Word给出的计数)并且它被拒绝的时间太长了.我不确切地知道正在使用的表达式有什么问题,或者可能是一个很好的表达式来确保准确的字数.

Dan*_*Dan 5

而不是扫描/\w + /你应扫描/\s + | $ /并将最大值减1,因为\ w字符匹配对于异常字符可能是意外的,因为只有A-Za-z0-9_-有效.