Где-то видел, но не могу вспомнить где — при регистрации надо было выбрать пароль, рядом с полем для ввода пароля был нарисован прогресс-бар. Прогресс бар показывал, насколько сложен пароль, динамически меняясь при вводе. Может, так же сделать? Прогресс бар при заполнении поля растет, как уперся — все. Только надо как-то из яваскрипта узнавать, сколько байт занимает введенный символ. Я пока не нашел, как.
Длина поля в байтах, про которые юзверь ничего не знает
Есть веб-страничка, на которой есть поле name, в БД поле имеет тип — длина 20 байт (тип этого поля и длину мы менять не можем, оно не наше).
Понятное дело, что пользователь может ввести имя как в однобайтовой кодировке, так и в мультибайтовой (2,3,4 байта на символ).
Если пользователь англичанин и вводит в латинице, то проблем нет, но если русскоязычный (у нас UTF-8) или китаец, то он может ввести 15 символов и это будет 30 байт, соответственно он увидит сообщение "Извините, не больше 20 символов" и будет сбит с толку, он ведь ввёл 15 символов и про байты ничего знать не знает.
Как быть в такой ситуации? Какое сообщение показать пользователю или может есть какие-нибудь неочевидные элегантные решения в подобных случаях?
Jabber: vitorg@jabber.org
Re[2]: Длина поля в байтах, про которые юзверь ничего не зна
Здравствуйте, Панда, Вы писали:
П>Где-то видел, но не могу вспомнить где — при регистрации надо было выбрать пароль, рядом с полем для ввода пароля был нарисован прогресс-бар...
Такая фишка есть, например, в регистрации на Яндексе. Да, идея в принципе толковая, надо только подумать над эргономикой, чтобы пользователю было сразу ясно что именно происходит, т.к. такую реализацию редко где встретишь и, возможно, ему будет непривычно.
Jabber: vitorg@jabber.org
Re: Длина поля в байтах, про которые юзверь ничего не знает
Здравствуйте, 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>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.