在javascript和Ruby on Rails中计算字符串长度

Wil*_*nes 6 javascript string postgresql ruby-on-rails

我在网站上有一个文本区域应该是有限的长度.

我允许用户输入255个字符,并使用Rails验证强制执行该限制:

validates_length_of :body, :maximum => 255
Run Code Online (Sandbox Code Playgroud)

同时,我添加了一个像你在Twitter上看到的javascript char计数器,向用户反馈他已经使用了多少个字符,并在超长时禁用提交按钮,并在Javascript中获得该长度像这样的电话:

element.length
Run Code Online (Sandbox Code Playgroud)

最后,为了强制数据完整性,在我的Postgres数据库中,我已将此字段创建为varchar(255)作为最后一道防线.

不幸的是,这些计算字符的方法似乎并不直接兼容.Javascript是最好的,因为它计算用户认为是一切都是单个字符的字符数.但是,一旦提交命中Rails,所有回车都已转换为\ r \n,现在占用2个字符的空间,这使得关闭调用失败Rails验证.即使我在Rails中对不同长度的验证进行手动编码,但是当它碰到数据库时我仍然会失败,尽管我还没有证实这一点.

对我来说,以用户想要的方式完成所有这些工作的最佳方式是什么?

最佳解决方案:一种能够满足用户期望的方法,其中任何类型的每个字符只有一个字符.如果这意味着增加varchar数据库字段的长度,则用户不应该偷偷发送创建超过255个字母的行的手工制作的帖子.

一些可接受的解决方案:一个ja​​vascript更改,使用户能够看到真实的字符数,这样点击返回一次增加计数器2个字符,同时正确处理可能有这些奇怪行为的所有符号.

Tom*_*zky 0

我建议将 CR-LF 转换为单个 LF 来存储数据。摆脱 Rails 验证,因为当数据库字段已设置宽度时不需要此验证。相反,让 Rails 在存储之前将 CRLF 转换为 LF。