Подсчет длины строки в JavaScript и Ruby on Rails

У меня есть текстовая область на веб-сайте, который должен быть ограничен в длине.

Я позволяю пользователям вводить 255 символов и осуществляю тот предел с проверкой направляющих:

validates_length_of :body, :maximum => 255

В то же время я добавил, что счетчик символа JavaScript как Вы видит в Твиттере, чтобы дать обратную связь пользователю на том, сколько символов он уже использовал, и отключить кнопку отправки, когда по длине, и получаю ту длину в JavaScript с вызовом как это:

element.length

Наконец, для осуществления целостности данных, в моей базе данных Postgres, я создал это поле как varchar (255) как последняя линия обороны.

К сожалению, эти методы подсчета символов, кажется, не непосредственно совместимы. JavaScript считает лучшее, в котором он считает то, что пользователи рассматривают как количество символов, где все - отдельный символ. Однажды направляющие хитов представления, однако, все возвраты каретки были преобразованы в \r\n, теперь подняв 2 ценности символов пространства, которое делает сбой опасного положения проверками направляющих. Даже если бы я был к handcode другой проверкой длины в направляющих, то он все еще перестал бы работать, когда он поражает базу данных, я думаю, хотя я еще не подтвердил это.

Каков лучший способ для меня сделать всю эту работу путем, пользователь хотел бы?

Лучшее решение: подход, который позволил бы мне оправдать пользовательские надежды, где каждый символ любого типа является только одним символом. Если это означает увеличивать длину varchar поля базы данных, пользователь не должен мочь украдкой отправить сообщение ручной работы, которое создает строку больше чем с 255 буквами.

Несколько Приемлемое решение: изменение JavaScript, которое позволяет пользователю видеть реальный счетчик символов, такой, что удар возврата увеличивает счетчик 2 символа за один раз, правильно обрабатывая все символы, которые могли бы иметь эти странные поведения.

6
задан William Jones 8 April 2010 в 16:10
поделиться

1 ответ

Я бы рекомендовал хранить данные с преобразованием CR-LF в одиночный LF. Избавьтесь от проверки рельсов, так как в этом нет необходимости, если в поле базы данных задана ширина. Вместо этого заставьте Rails конвертировать CRLF в LF перед сохранением.

0
ответ дан 18 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: