【发布时间】:2011-02-05 18:57:06
【问题描述】:
我在网站上有一个文本区域,应该限制长度。
我允许用户输入 255 个字符,并通过 Rails 验证强制执行该限制:
validates_length_of :body, :maximum => 255
同时,我添加了一个 javascript 字符计数器,就像你在 Twitter 上看到的那样,向用户反馈他已经使用了多少个字符,并在超过长度时禁用提交按钮,并且正在获取该长度在 Javascript 中调用如下:
element.length
最后,为了确保数据完整性,在我的 Postgres 数据库中,我将此字段创建为 varchar(255) 作为最后一道防线。
不幸的是,这些计算字符的方法似乎并不直接兼容。 Javascript 算得上是最好的,因为它将用户认为的字符数计算为字符数,其中所有内容都是单个字符。然而,一旦提交命中 Rails,所有回车都已转换为 \r\n,现在占用 2 个字符的空间,这使得关闭调用失败 Rails 验证。即使我要在 Rails 中手动编码不同长度的验证,当它到达我认为的数据库时它仍然会失败,尽管我还没有确认这一点。
对我来说,按照用户希望的方式完成所有这些工作的最佳方式是什么?
最佳解决方案:一种使我能够满足用户期望的方法,其中任何类型的每个字符都只有一个字符。如果这意味着增加 varchar 数据库字段的长度,则用户不应该能够偷偷发送手工制作的帖子,该帖子会创建超过 255 个字母的行。
有些可接受的解决方案:一个 javascript 更改,使用户能够看到真实的字符数,这样点击 return 一次会使计数器增加 2 个字符,同时正确处理可能具有这些奇怪行为的所有符号。
【问题讨论】:
标签: javascript ruby-on-rails string postgresql