Длина поля в байтах, про которые юзверь ничего не знает
От: vitorg Россия  
Дата: 06.03.09 10:33
Оценка:
Есть веб-страничка, на которой есть поле name, в БД поле имеет тип — длина 20 байт (тип этого поля и длину мы менять не можем, оно не наше).
Понятное дело, что пользователь может ввести имя как в однобайтовой кодировке, так и в мультибайтовой (2,3,4 байта на символ).

Если пользователь англичанин и вводит в латинице, то проблем нет, но если русскоязычный (у нас UTF-8) или китаец, то он может ввести 15 символов и это будет 30 байт, соответственно он увидит сообщение "Извините, не больше 20 символов" и будет сбит с толку, он ведь ввёл 15 символов и про байты ничего знать не знает.

Как быть в такой ситуации? Какое сообщение показать пользователю или может есть какие-нибудь неочевидные элегантные решения в подобных случаях?
Jabber: vitorg@jabber.org
Re: Длина поля в байтах, про которые юзверь ничего не знает
От: Панда Россия  
Дата: 09.03.09 07:02
Оценка: +1
Где-то видел, но не могу вспомнить где — при регистрации надо было выбрать пароль, рядом с полем для ввода пароля был нарисован прогресс-бар. Прогресс бар показывал, насколько сложен пароль, динамически меняясь при вводе. Может, так же сделать? Прогресс бар при заполнении поля растет, как уперся — все. Только надо как-то из яваскрипта узнавать, сколько байт занимает введенный символ. Я пока не нашел, как.
Re[2]: Длина поля в байтах, про которые юзверь ничего не зна
От: vitorg Россия  
Дата: 10.03.09 09:01
Оценка:
Здравствуйте, Панда, Вы писали:

П>Где-то видел, но не могу вспомнить где — при регистрации надо было выбрать пароль, рядом с полем для ввода пароля был нарисован прогресс-бар...


Такая фишка есть, например, в регистрации на Яндексе. Да, идея в принципе толковая, надо только подумать над эргономикой, чтобы пользователю было сразу ясно что именно происходит, т.к. такую реализацию редко где встретишь и, возможно, ему будет непривычно.
Jabber: vitorg@jabber.org
Re: Длина поля в байтах, про которые юзверь ничего не знает
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.03.09 06:03
Оценка:
Здравствуйте, vitorg, Вы писали:

V>Как быть в такой ситуации? Какое сообщение показать пользователю или может есть какие-нибудь неочевидные элегантные решения в подобных случаях?

Есть два решения:
1. Нечестно-пессимистичное. Заранее определить кодировку, в которой будут храниться строки, и перевести байты в символы. Примерно так:
public static int GetMinCharCount(this Encoding encoding, int byteCount)
{
  // get the max char count as a first guess:
    int chars = encoding.GetMaxCharCount(byteCount);
    while(encoding.GetMaxByteCount(chars)>byteCount)
      chars--;
    return chars;
}

Пессимистичность в том, что в UTF-8 пользователь мог бы ввести пять символов кириллицы и еще десять латиницы; но GetMinCharCount ему не даст — потому што а вдруг! Поскольку некоторые символы в UTF8 занимают ажно четыре байта, 20 байт превратится в 5 символов и копец.

2. Честно-сложный. Через AJAX бегать на сервер со строкой пользователя, и смотреть через Encoding.GetByteCount сколько она займет. Ну, и показывать progress indicator. Тут всё честно — или 20 латиницы, или 10 кириллицы, или 5 иероглифов.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.