验证字段不超过n个字的最快方法是什么?

时间:2010-05-04 01:43:32

标签: ruby-on-rails ruby validation word-count

我有一个Ruby-on-Rails模型:

class Candidate < ActiveRecord::Base
  validates_presence_of :application_essay
  validate :validate_length_of_application_essay

  protected

  def validate_length_of_application_essay
    return if application_essay.blank? # don't add a second error message if they didn't fill it out
    errors.add(:application_essay, :too_long), unless ...
  end
end

如果没有放入C,检查application_essay包含不超过500字的最快方法是什么?您可以假设大多数论文至少有200个单词,不可能超过5000个单词,并且是英文(或伪英语有时称为“business-ese”)。您也可以将任何您想要的内容归类为“单词”,只要您的分类对于典型用户来说是显而易见的。 (注意:这不是讨论“典型用户”是什么的地方:))

6 个答案:

答案 0 :(得分:7)

在使用带有:tokenizer方法的lambda的Rails3中也可以。

validates_length_of :essay, :minimum => 100, :too_short => "Your essay must be at least 100 words."), :tokenizer => lambda {|str| str.scan(/\w+/) }

它可能不是最快的,但肯定是最干净的方式。

答案 1 :(得分:2)

你不会比线性搜索更快,抱歉(除非这是用于某种文本编辑器,你可以逐步跟踪)

答案 2 :(得分:1)

您可以估算单词的典型大小,并通过除法来猜测单词的数量。

这里有一些提示:http://blogamundo.net/lab/wordlengths/

您可以尝试使用5.1,并通过运行一些测试来了解您的准确程度。

因为你有空格,所以很可能除以6.1。

请记住,您会假设您的文字不仅仅是大量的空白或其他内容。 好吧,但如果你真的只是有兴趣确保它不超过x字。你可以在x上尝试一个低数字5,如果它少于x乘以5个字符,你就可以确定它没有超过x个单词。

所以你可能会更好地做其他答案中所述的线性搜索。线性搜索根本就不好。这取决于你想做什么。

答案 3 :(得分:1)

我会使用类似的东西:

string.split(" ").length <= 500

您看到了哪些性能问题? 一个字符串500左右的单词不应该是一个大问题。

答案 4 :(得分:1)

有一个插件,我自己没有使用过它:)

http://code.google.com/p/validates-word-count/

That plugin将所有相邻的“单词字符”切换为单个字符,然后删除所有非单词字符并对其进行计数。不确定它是否是最快的。

答案 5 :(得分:-1)

这是一篇你可能喜欢的好文章

http://dotnetperls.com/word-count