Имя пользователя для входа в систему
Пробелы, двоеточия и кавычки не допускаются.
Оно не может состоять только из цифр, и поле нельзя оставлять незаполненным.
Длина ограничивается 32 символами.
Пароль для входа в систему
Максимально допустимая длина пароля для администраторов и супервайзера составляет 32 символа, тогда как для пользователей длина ограничивается 128 символами.
В отношении типов символов, которые могут использоваться для задания пароля, никаких ограничений не установлено. В целях безопасности рекомендуется создавать пароли, содержащие буквы верхнего и нижнего регистров, цифры и другие символы. Чем большее число символов используется в пароле, тем более трудной является задача его подбора для посторонних лиц.
В подразделе [Политика паролей] раздела [Расширенная безопасность] вы можете установить требование в отношении обязательного включения в пароль букв верхнего и нижнего регистров, цифр и других символов, а также минимально необходимое количество символов в пароле. Для получения сведений об определении политики паролей см. Настройка функций расширенной безопасности.
Какими должны быть допустимые символы в именах пользователей?
Многие веб-системы аутентификации пользователей не допускают имен пользователей, содержащих символы, отличные от букв, цифр и символов подчеркивания.
Может быть, для этого есть техническая причина?
authentication standards special-charactersПоделиться Источник Emanuil Rusev 12 января 2010 в 23:44
10 ответов
- Допустимые символы в именах переменных окружения Linux
Какие символы разрешены в именах переменных окружения Linux? Мой беглый поиск по справочным страницам и интернету дал только информацию о том, как работать с переменными, но не о том, какие имена разрешены. У меня есть программа Java, которая требует определенной переменной окружения, содержащей…
- HTTP URL-допустимые символы в именах параметров
Существует ли какое-либо формальное ограничение относительно того, какие символы разрешены в именах параметров URL? Я читал RFC3986 (Uniform Resource Identifier (URI): Generic Syntax), но не пришел к окончательному выводу. Я знаю, что есть практические ограничения, но действительно ли было бы…
18
Хорошо продуманная система не обязательно должна предотвращать появление каких-либо специальных символов в именах пользователей.
Тем не менее, причина, по которой подчеркивания традиционно принимаются, заключается в том, что подчеркивание обычно рассматривается как символ «word», наряду с буквами и цифрами. Обычно это единственный другой персонаж, которому дано это различие. Это верно для регулярных выражений и даже на базовом уровне в большинстве операционных систем (введите подчеркивание в слове и дважды щелкните буквы. Выделение будет проходить дальше подчеркивания. Теперь попробуйте то же самое с тире, это, скорее всего, не получится.)
Поделиться Nicole 12 января 2010 в 23:48
15
Да: чтобы избежать необходимости экранировать специальные символы. Ленивые программисты просто бросают то, что вводит пользователь, прямо в код, и это приводит к атакам инъекций.
Даже если он не используется злонамеренно, разрешить пользователю вводить символы, которые будут конфликтовать где-то в другом месте, может быть больше хлопот, чем необходимо. Например, если вы решите создать каталог файловой системы для каждого пользователя для хранения их загрузок, то имя пользователя должно соответствовать правилам именования каталогов на этом OS (например нет \/:*?"<>|
на Windows).
После того, как вы избежали столкновений, таких как именование каталога, и удалили "';%
и //
, чтобы избежать атак инъекций, вы удалили большую часть знаков препинания и «зачем кому-то вообще нужна пунктуация в имени пользователя»?
Было гораздо проще написать быстрый regex для проверки имен пользователей на [a-zA-Z0-9_]
и покончить с этим, чем возиться с выяснением всех возможных знаков препинания, которые не будут конфликтовать, или каким-то образом сопоставлять их с другими символами..{4,32})$
Для этого требуется длина 4 с максимальными 32 символами. Он должен начинаться с символа слова и может содержать непрерывные точки и тире. Единственная причина, по которой я использую это, заключается в том, что он достаточно строг, чтобы интегрироваться практически с чем угодно 🙂
Действительный :
test.tost
Недействительный :
test..tost
Поделиться Diadistis 12 января 2010 в 23:57
5
Ограничение его этими символами (или даже их подмножеством ASCII) предотвращает принятие таких имен пользователей, как. Не принимая эти символы, вы можете предотвратить широкий диапазон или usernames-that-look-like-other-usernames.
Поделиться medgno 06 марта 2011 в 03:25
- Каковы допустимые символы в именах переменных PHP, методов, классов и т. д.?
Какие допустимые символы вы можете использовать в именах PHP для переменных, констант, функций, методов, классов …? В руководстве есть некоторые упоминания о регулярном выражении [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* . Когда это ограничение применяется, а когда нет?
- Допустимые символы в именах функций Python
Существуют ли какие-либо другие разрешенные символы в именах функций Python, кроме алфавитных символов, цифр и символов подчеркивания? Если да, то каковы они?
Поделиться John Saunders 13 января 2010 в 00:17
3
Потому что это позволяет представить несколько слов в несколько удобочитаемом виде.
Лично я очень, очень хочу, чтобы люди немного расширили вещи, чтобы разрешить тире и апострофы. Это позволило бы людям использовать неанглоязычные фонетические имена (например, имена индейских племен, такие как Ше-Ки и Ке-Хса-Це)
Поделиться T.E.D. 12 января 2010 в 23:48
2
Основная причина, по которой веб-сайты применяют такие правила, — это читабельность (потому что имена пользователей, такие как ~-|this<>one|-~
, раздражают). Это также может быть связано с тем, что это меньше работы (подчеркивания совпадают с \w+
regex, а тире и другие специальные символы-нет), но я сомневаюсь, что это главная причина.
Нет «standard», поэтому, если ни одна из вышеперечисленных причин вас не беспокоит, делайте все, что хотите. Лично я хотел бы, чтобы больше сайтов принимали тире и точки, но на самом деле это личное предпочтение читаемости и согласованности по сравнению с выражением.
Поделиться Sasha Chedygov 12 января 2010 в 23:50
1
Зависит от того, как используются ваши имена пользователей. Не существует общего правила, не зная контекста.
Поделиться Noon Silk 12 января 2010 в 23:47
1
Подчеркивание традиционно разрешалось в идентификаторах на большинстве языков программирования и, как правило, было единственным разрешенным символом «special».
Но многие веб-логины по-прежнему не принимают специальный символ ANY и ограничены символами нижнего/верхнего регистра и цифрами…
А другие прекрасно справляются с действительно особенными 😉
Поделиться Francesca 12 января 2010 в 23:50
0
Люди могут захотеть написать свои имена пользователей как _это, а не как _это или LikeThis.
Поделиться John 12 января 2010 в 23:47
Похожие вопросы:
Моя сборка потерпела неудачу, когда у меня был дефис в имени переменной, но преуспела, когда я изменил его на подчеркивание. Ошибка была такова, но я мог видеть в браузере онлайн-рабочего…
Redis: допустимые символы для значений
Я знаю соглашения об именах для ключей Redis (это отличная ссылка здесь Соглашение об именах и допустимые символы для ключа Redis), но как насчет значений? Будет ли у меня проблема, если мои…
iOS-какими именно должны быть все названия изображений, чтобы работать с дисплеем retina?
Я просто просмотрел все изображения и добавил изображения с именем [email protected], чтобы у каждого изображения была копия для дисплея retina. Но у меня есть 4 изображения, которые имеют…
Допустимые символы в именах переменных окружения Linux
Какие символы разрешены в именах переменных окружения Linux? Мой беглый поиск по справочным страницам и интернету дал только информацию о том, как работать с переменными, но не о том, какие имена…
HTTP URL-допустимые символы в именах параметров
Существует ли какое-либо формальное ограничение относительно того, какие символы разрешены в именах параметров URL? Я читал RFC3986 (Uniform Resource Identifier (URI): Generic Syntax), но не пришел…
Каковы допустимые символы в именах переменных PHP, методов, классов и т. д.?
Какие допустимые символы вы можете использовать в именах PHP для переменных, констант, функций, методов, классов …? В руководстве есть некоторые упоминания о регулярном выражении…
Допустимые символы в именах функций Python
Существуют ли какие-либо другие разрешенные символы в именах функций Python, кроме алфавитных символов, цифр и символов подчеркивания? Если да, то каковы они?
Популярные специальные символы в именах git branch
Каковы допустимые символы для имен меток графа DSE и ключей свойств?
Каковы допустимые символы для имен меток вершин/ребер графа DSE и ключей свойств? Titan допускал любое значение, и у нас были некоторые из наших меток с именами . символов. Попытка импортировать…
Строка включает в себя только допустимые символы?
Я хотел бы проверить правильность строки, чтобы проверить, содержит ли она только допустимые символы или не использует C++. Допустимые символы должны быть даны function как кодировка допустимых…
Ошибка при создании имени пользователя, содержаного специальный символ — Office
- Чтение занимает 2 мин
-
- Применяется к:
- Office 365 User and Domain Management
В этой статье
Примечание
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Проблема
При создании имени пользователя, содержаного специальный символ в Microsoft Office 365, вы получаете одно из следующих сообщений об ошибке:
На портале Office 365
Invalid user name
Only letters and numbers are allowed. No spaces.
В Microsoft Azure Active Directory модуль для Windows PowerShell
New-MsolUser : Invalid value for parameter. Parameter Name: UserPrincipalName.
At line:1 char:13
В Exchange Online Windows PowerShell
A Windows Live error occurred while provisioning for "[email protected]". The e-mail name contains invalid characters.
Причина
Такое поведение возникает из-за того, что определенные специальные символы не допускаются в именах пользователей, которые вы создаете в Office 365. Эти специальные символы включают, но не ограничиваются следующими:
Свойство | Требования userPrincipalName |
---|---|
Разрешены символы |
|
Символы, не разрешенные |
|
Ограничения длины |
|
Однако применяются следующие исключения:
- В имени пользователя разрешено подчеркивать (_). в том числе в начале и в конце имени.
- При создании группы знак номера (#) можно использовать в качестве части имени группы. Однако адрес электронной почты, который вы создаете для группы рассылки или общего почтового ящика, не может использовать знак #.
Решение
При создании нового пользователя в Office 365 убедитесь, что вы не используете какие-либо специальные символы, перечисленные в разделе «Причина».
Требуется дополнительная помощь? Зайдите на сайт сообщества Майкрософт.
Ошибка «недопустимые символы» при синхронизации файлов из проводника Windows с OneDrive
Проблема
При использовании Microsoft OneDrive для работы или учебного заведения (прежнее название — Microsoft SkyDrive Pro) для синхронизации файлов из проводника Windows с сайтом Microsoft SharePoint некоторые файлы могут синхронизироваться неправильно. Вместо этого отображается красный крестик на значке файла в проводнике Windows, и вы получаете одно из указанных ниже проблем.
-
В центре отправки Microsoft Office появляется следующее сообщение об ошибке: »
не удалось выполнить
отправку» Недопустимые символы -
В OneDrive. Проблемы с синхронизацией отображаются в области уведомлений. При нажатии кнопки Показать проблемы с синхронизациейпоявится следующее сообщение:
элемент X не может быть синхронизирован с OneDrive.
Примечание. X — количество файлов, которые OneDrive пытается синхронизироваться.
В столбце Error (ошибка) также присутствует следующее сообщение:
это имя файла содержит недопустимые символы.
ПРИМЕЧАНИЕ. Эта проблема возникает, если вы синхронизируете файлы с Microsoft Microsoft 365 SharePoint Online или Microsoft SharePoint Server 2013.
Решение
Чтобы устранить эту проблему, удалите недопустимые символы из имени файла в проводнике Windows, который вы пытаетесь отправить на сайт SharePoint.
Дополнительные сведения о символах, которые могут привести к этой ошибке, можно найти в разделе ограничения и ограничения при синхронизации библиотек SharePoint с компьютером через OneDrive.
После удаления неподдерживаемых символов из имени файла он синхронизируется с OneDrive.
Дополнительные сведения
Эта проблема возникает из-за того, что в OneDrive не поддерживаются символы, указанные в разделе «решение».
Дополнительные сведения о OneDrive ах можно найти в разделе что такое OneDrive?
Все еще нужна помощь? Перейдите в сообщество Майкрософт.
Ошибка недопустимых символов в 1С
Содержание:
1. Недопустимые символы в имени файла
2. Недопустимые символы в XML
В данной статье будет рассмотрено, как происходит замена и удаление недопустимых символов в системе 1С, если мы находим недопустимые символы в имени файла и когда недопустимые символы содержит XML.
1. Недопустимые символы в имени файла
Когда имя некоторого файла содержит недопустимые символы, возникает потребность замены этих символов. Для произведения замены нужно оговорить, какой синтаксис имеет функция замены при ошибке недопустимых символов в имени файла. Он представлен на скриншоте со строкой кода далее:
Рис.1 Замена недопустимых символов с имени файла
Также у данной функции есть первичные параметры:
· «ИмяФайла» – параметр со строкой, которая содержит наименование файла;
· «НаЧтоМенять» – параметр со строкой, на которую будут заменены недопустимые символы в названии файла.
Результат работы данной функции – это значение, которое будет возвращаться. В нашем случае это строка, которая содержит новое имя файла, после преобразований.
Рассмотрим пример вызова данной функции:
Рис. 2 функция замены при ошибке недопустимых символов
Также очень важным аспектом является доступность данной функции. В системе 1С функцию можно использовать на сервере, на тонком клиенте, на толстом клиенте и на внешнем соединении.
2. Недопустимые символы в XML
Рассмотрим, как происходит удаление если XML содержит недопустимые символы.
Чтобы выполнить данную процедуру, аналогично предыдущему пункту используем специальную функцию, которая продемонстрирована на строке ниже:
Рис. 3 Функция для удаления недопустимых символов XML
Далее следует оговорить, какие параметры поддерживаются в данной функции. Параметр в данном случае только один – это «Текст-Строка». Это строка, внутри которой требуется провести удаление всех недопустимых символов.
Итогом работы этой функции будет значение, которое возвращается в виде строки, полученной в итоге удаления всех недопустимых символов из XML строки.
Рассмотрим на примере общего вида, который представлен ниже, как будет выглядеть вызов функции по удалению, когда текст XML содержит недопустимые символы:
Рис. 4 Вызов функции для удаления недопустимых символов XML
Использование данной функции доступно для сервера, на тонком и толстом клиентах и для внешнего соединения.
Рассмотрим использование функции «НайтиНедопустимыеСимволыXML» на примере. Данная функция не удаляет, а только производит поиск по символам в строке, которые являются недопустимыми в XML строке:
Рис. 5 Удаление недопустимых символов XML
Чтобы сделать поиск по недопустимым символам более быстрым, попытаемся определить позицию недопустимого символа в тексте XML строки. Для этого в середине цикла дадим функции первичные позиции из поиска. Пример данного применения показан на строчке кода ниже:
Рис. 6 Поиск недопустимого символа в тексте
В данной статье были рассмотрены функции, которые помогают определять и удалять, либо заменять, недопустимые символы в имени файла и в XML строке.
Специалист компании «Кодерлайн»
Анна Лисовая
Длина SMS и допустимые символы — mobizon.kz
Поддерживаемые наборы символов
Текст SMS может быть отправлен в одной из двух кодировок в зависимости от набора символов, использованных при составлении сообщения.
Кодировка GSM (латиница, 7 bit)
Если текст содержит только символы из приведенной таблицы, то SMS будет отправлено в кодировке GSM:
@ | Δ | SP | 0 | ¡ | P | ¿ | p |
£ | _ | ! | 1 | A | Q | a | q |
$ | Φ | « | 2 | B | R | b | r |
¥ | Γ | # | 3 | C | S | c | s |
è | Λ | ¤ | 4 | D | T | d | t |
é | Ω | % | 5 | E | U | e | u |
ù | Π | & | 6 | F | V | f | v |
ì | Ψ | ‘ | 7 | G | W | g | w |
ò | Σ | ( | 8 | H | X | h | x |
Ç | Θ | ) | 9 | I | Y | i | y |
LF | Ξ | * | : | J | Z | j | z |
Ø | + | ; | K | Ä | k | ä | |
ø | Æ | , | < | L | Ö | l | ö |
CR | æ | — | = | M | Ñ | m | ñ |
Å | ß | . | > | N | Ü | n | ü |
å | É | / | ? | O | § | o | à |
CR — символ возврата каретки
LF — символ переноса строки
SP — символ пробела
Эта кодировка позволяет отправлять до 160 символов в одном SMS-сообщении. Также следует учитывать, что в GSM-7 кодировке существует несколько символов, которые при подсчете длины SMS считаются за два символа, ниже приведена таблица таких символов:
Кодировка Unicode (кириллица, расширенный набор символов)
В случае наличия хотя бы одного символа, не относящегося к GSM кодировке, SMS-сообщение будет отправлено в кодировке Unicode. Такое сообщение может содержать до 70 символов. Поддерживаются только символы из таблицы юникод (UTF-8) с кодами в диапазоне от U+0000 до U+9999, все остальные символы на данный момент не поддерживаются.
Длина SMS
Длина одиночного сообщения, состоящего только из символов GSM-алфавита — 160 символов.
Длина одиночного сообщения в кодировке Unicode — 70 символов.
В случае, если SMS-сообщение превышает указанную длину, оно разбивается на части — сегменты.
Каждый сегмент SMS отправляется и тарифицируется как отдельное сообщение.Каждый сегмент SMS содержит специальный заголовок (несколько символов служебной информации) для последующей склейки на стороне получателя, поэтому максимальная длина одного сегмента в длинном сообщении составляет 153 символа в GSM кодировке и 67 символов в Unicode.
Максимальная длина SMS составляет 140 байт. Каждый символ GSM-алфавита кодируется 7 битами (за исключением нескольких, которые кодируются 14 битами). Это позволяет в 140 байтах, отведенных для текста SMS, передавать до 160 символов (140*8/7=160). При использовании в тексте SMS даже одного символа, не относящегося к GSM, весь текст передается в кодировке Unicode. При этом допустимое количество символов в одиночном сообщении сокращается до 70, так как в Unicode каждый символ кодируется при помощи 16 бит (140*8/16=70).
Для длинных SMS-сообщений используется заголовок (или UDH), который содержит 6 байт служебной информации, что занимает 7 символов при использовании только латиницы или 3 символа при использовании Юникода. Соответственно максимальная длина текста в одном сегменте составляет 153 символа для GSM и 67 символов для Unicode кодировки.
Количество сегментов в SMS | Количество символов в SMS | |
---|---|---|
Кодировка GSM | Кодировка Unicode | |
1 | 160 | 70 |
2 | 306 | 134 |
3 | 459 | 201 |
4 | 612 | 268 |
5 | 765 | 335 |
6 | 918 | 402 |
7 | 1071 | 469 |
8 | 1224 | 536 |
9 | 1377 | 603 |
10 | 1530 | 670 |
python — Допустимые символы в имени класса Python
Я динамически создаю классы Python, и я знаю, что не все символы допустимы в этом контексте.
Есть ли где-нибудь в библиотеке классов метод, который я могу использовать для очистки произвольной текстовой строки, чтобы я мог использовать его в качестве имени класса? Либо это, либо список разрешенных символов будет хорошей помощью.
Добавление в отношении столкновений с именами идентификаторов: Как и @Ignacio, указанный в ответе ниже, любой символ, который является допустимый в качестве идентификатора является допустимым символом в имени класса. И вы даже можете без проблем использовать зарезервированное слово в качестве имени класса. Но тут есть подвох. Если вы используете зарезервированное слово, вы не сможете сделать класс доступным, как другие (не динамически созданные) классы (например, выполнив globals()[my_class.__name__] = my_class
). Зарезервированное слово всегда будет иметь приоритет в таком случае.
31
Filipe Correia 12 Апр 2012 в 12:50
4 ответа
Лучший ответ
Python Language Reference, §2.3, «Идентификаторы и ключевые слова»
Идентификаторы (также называемые names ) описываются следующими лексическими определениями:
identifier ::= (letter|"_") (letter | digit | "_")* letter ::= lowercase | uppercase lowercase ::= "a"..."z" uppercase ::= "A"..."Z" digit ::= "0"..."9"
Идентификаторы не ограничены по длине. Дело значимое.
35
Ignacio Vazquez-Abrams 4 Сен 2014 в 13:42
Это старый вопрос на данный момент, но я хотел бы добавить ответ о том, как сделать это в Python 3, поскольку я сделал реализацию.
Разрешенные символы описаны здесь: https://docs.python.org/3 /reference/lexical_analysis.html#identifiers. Они включают в себя довольно много специальных символов, включая знаки препинания, подчеркивания и целый ряд иностранных символов. К счастью, модуль unicodedata
может помочь. Вот моя реализация, реализующая непосредственно то, что написано в документации Python:
import unicodedata
def is_valid_name(name):
if not _is_id_start(name[0]):
return False
for character in name[1:]:
if not _is_id_continue(character):
return False
return True #All characters are allowed.
_allowed_id_continue_categories = {"Ll", "Lm", "Lo", "Lt", "Lu", "Mc", "Mn", "Nd", "Nl", "Pc"}
_allowed_id_continue_characters = {"_", "\u00B7", "\u0387", "\u1369", "\u136A", "\u136B", "\u136C", "\u136D", "\u136E", "\u136F", "\u1370", "\u1371", "\u19DA", "\u2118", "\u212E", "\u309B", "\u309C"}
_allowed_id_start_categories = {"Ll", "Lm", "Lo", "Lt", "Lu", "Nl"}
_allowed_id_start_characters = {"_", "\u2118", "\u212E", "\u309B", "\u309C"}
def _is_id_start(character):
return unicodedata.category(character) in _allowed_id_start_categories or character in _allowed_id_start_categories or unicodedata.category(unicodedata.normalize("NFKC", character)) in _allowed_id_start_categories or unicodedata.normalize("NFKC", character) in _allowed_id_start_characters
def _is_id_continue(character):
return unicodedata.category(character) in _allowed_id_continue_categories or character in _allowed_id_continue_characters or unicodedata.category(unicodedata.normalize("NFKC", character)) in _allowed_id_continue_categories or unicodedata.normalize("NFKC", character) in _allowed_id_continue_characters
Этот код адаптирован отсюда в разделе CC0:
1
Ghostkeeper 10 Янв 2017 в 03:34
Что делает это интересным, так это то, что первый символ идентификатора является специальным. После первого символа числа от 0 до 9 действительны для идентификаторов, но они не должны быть первым символом.
Вот функция, которая будет возвращать действительный идентификатор для любой случайной строки символов. Вот как это работает:
Сначала мы используем itr = iter(seq)
, чтобы получить явный итератор для ввода. Затем идет первый цикл, который использует итератор itr
для просмотра символов, пока не найдет действительный первый символ для идентификатора. Затем он выходит из этого цикла и запускает второй цикл, используя тот же итератор (который мы назвали itr
) для второго цикла. Итератор itr
сохраняет наше место для нас; символы, которые первый цикл извлек из итератора, по-прежнему исчезают при запуске второго цикла.
def gen_valid_identifier(seq):
# get an iterator
itr = iter(seq)
# pull characters until we get a legal one for first in identifer
for ch in itr:
if ch == '_' or ch.isalpha():
yield ch
break
# pull remaining characters and yield legal ones for identifier
for ch in itr:
if ch == '_' or ch.isalpha() or ch.isdigit():
yield ch
def sanitize_identifier(name):
return ''.join(gen_valid_identifier(name))
Это чистый и питонский способ обработки последовательности двумя различными способами. Для такой простой задачи у нас может быть просто логическая переменная, которая указывает, видели ли мы первый символ или нет:
def gen_valid_identifier(seq):
saw_first_char = False
for ch in seq:
if not saw_first_char and (ch == '_' or ch.isalpha()):
saw_first_char = True
yield ch
elif saw_first_char and (ch == '_' or ch.isalpha() or ch.isdigit()):
yield ch
Мне не нравится эта версия почти так же, как первая версия. Специальная обработка для одного символа теперь запутывается во всем потоке управления, и это будет медленнее, чем в первой версии, поскольку она должна постоянно проверять значение saw_first_char
. Но именно так вы бы справились с потоком контроля в большинстве языков! Явный итератор Python — отличная функция, и я думаю, что он делает этот код намного лучше.
Цикл на явном итераторе так же быстр, как позволить Python неявно получить итератор для вас, а явный итератор позволяет нам разделить циклы, которые обрабатывают различные правила для разных частей идентификатора. Таким образом, явный итератор дает нам более чистый код, который также работает быстрее. Win / выиграть .
5
steveha 24 Фев 2015 в 18:44
этикеток — Как четко указать пользователю, какие символы действительны
Вы должны показать всех действительных или всех недопустимых символа до , которые пользователь начнет вводить в поле. Это должна быть подсказка. Сделайте его кратким, понятным и понятным.
загрузить исходный код bmml — каркасы, созданные с помощью макетов Balsamiq
Примеры заполнителей
Используйте поля с заполнителем, который показывает допустимый пример ввода.Примеры заполнителей указывают предпочтительный формат ввода. Это может помочь, например, в поле телефонного номера.
Сообщение о фокусе
Отображать фиксированную метку или всплывающее окно, когда пользователь входит в поле.
Пользователь увидит подсказку до того, как он начнет вводить данные, поэтому он может придумать другое значение, если то, которое он хотел ввести, неверно. Это также решает возможный вопрос, который пользователь может задать перед вводом: «Что мне здесь написать? Правильно ли введено?».
Список коротких и жирных символов
Используйте краткую форму допустимых символов, таких как «a-z», а не «только буквенно-цифровые».
Намного легче следить за принятыми символами и понимать их. Вам не нужно выяснять значение таких слов, как «хорошо, буквенно-цифровые символы — это символы от a до z с числами». Также проясняет неясность, например: «разрешены ли прописные буквы?».
Я бы также порекомендовал решение @ NonNumeric с выделением полужирным шрифтом в списке разрешенных символов.Это привлекает внимание к сути всплывающего сообщения.
Отзыв о размытии
После того, как пользователь заполнил поле и фокус потерян, необходимо проверить поле.
- Если ввод действителен, покажите галочку, которая указывает на действительный ввод.
- Если ввод неверен, оставьте всплывающее окно там и сделайте его или поле пользователя (или и то, и другое) красным, чтобы оно указывало на то, что что-то пошло не так.
Благодаря этому, если пользователь пропустил руководство перед вводом, у него будет обратная связь после его ввода.Ошибки / галочки также упрощают обзор заполненной формы.
valid% 20character — определение английского языка, грамматика, произношение, синонимы и примеры
Этот модуль описывает ту часть процедуры, с помощью которой нотифицированный орган устанавливает и удостоверяет, что образец, представляющий предполагаемое производство, соответствует положениям Директивы 96/48 / EC и TSI, которые применяются к нему в отношении пригодности для использования, для быть продемонстрировано валидацией типа опытом эксплуатации.
ЕврЛекс-2
Отсутствие действующих сертификатов и документов, предусмотренных соответствующими актами.
ЕврЛекс-2
Система была протестирована, и утвердил в лаборатории и в полевых условиях при отрицательных температурах с использованием компонентов, которые содержали реальные дефекты трещин.
Кордис
Статья 17 Подтверждение заявки на санкционирование существенного изменения аспекта, охватываемого Частью I отчета об оценке
ЕврЛекс-2
Процент действительных данных ГГ SO
еврлекс
(50) Аналогичное соображение, связанное с технологическим развитием, является действительным в отношении изменений в моде, с очевидной разницей в том, что мода, в отличие от технологических разработок, учитывает краткосрочные изменения в моделях потребления.
ЕврЛекс-2
МООНСДРК ежемесячно оказывала материально-техническую поддержку и, при необходимости, поддержку в проведении проверок и учений на 40 горнодобывающих предприятиях в восточных провинциях.
UN-2
Группа подтверждает абсолютную актуальность многосторонней дипломатии в области разоружения и нераспространения и выражает свою решимость продвигать многосторонность как ключевой принцип переговоров в этих областях.
UN-2
Таможня должна удостовериться, что партия древесины и лесоматериалов из страны-партнера покрывается действующей лицензией FLEGT при предъявлении для выпуска в свободное обращение.
Eurlex2019
На разных этапах процедуры отбора вам необходимо будет предоставить официальный документ, подтверждающий ваше гражданство (например, паспорт или удостоверение личности), который должен быть действительным на дату окончания подачи вашего заявления (дата окончания первой части вашего заявления в случай двухчастного сценария приложения).
eurlex-diff-2018-06-20
009 Записывающее оборудование должно игнорировать вставленные действительные карты , отличные от , за исключением отображения, печати или загрузки данных, хранящихся на карте с истекшим сроком действия, что должно быть возможным.
ЕврЛекс-2
Этот документ об улове должен включать заявление с указанием причин для этой проверки и описывать обстоятельства, при которых изъятая или конфискованная рыба поступает в продажу.
ЕврЛекс-2
Следовательно, срок действия этого решения должен быть ограничен этим периодом.
ЕврЛекс-2
(1) Инструкции по применению, меры по снижению риска и другие указания по использованию в соответствии с этим разделом являются действительными для любых разрешенных видов использования в рамках мета SPC1.
Eurlex2018q4
cardExpiryDate — это дата, когда заканчивается срок действия карты.
ЕврЛекс-2
Эта формула должна быть действительной для туш весом от # до # кг.
oj4
В соответствии с рекомендациями EP по валидации (1), насколько доступны калиброванные стандартные образцы подтипа; транскрипты in vitro могут быть вариантом
ЕврЛекс-2
«Этот сертификат не является действительным , если он не сопровождается оригинальным свидетельством о личной собственности, выданным третьей страной, и если образец, к которому он относится, не сопровождается его владельцем.’
Eurlex2019
(a) иметь действительный документ или документы на , дающие им право делать это, как указано в Статье 5;
не задано
Были случаи, когда государство-участник депортировало лиц со статусом беженцев, включая целые семьи и тех, кто подвергался риску преследования и пыток, за «незаконное» пребывание без действующей визы или вида на жительство;
UN-2
(12) Правомочные авиакомпании — это авиаперевозчики с лицензией на осуществление полетов или разрешением на воздушные перевозки, выданным французскими властями, и , действительным на 11 сентября 2001 года.
ЕврЛекс-2
В течение периода, указанного в параграфе 1, противная сторона также должна представить доказательства существования, действительности и объема защиты своего предыдущего знака или более раннего права, а также доказательства, подтверждающие его право подать возражение.
ЕврЛекс-2
Разрешение должно быть , действительным для всех государств-членов.
ЕЦБ
Можно ли использовать космическую информацию для проверки данных ?
UN-2
В этом заголовке указывается количество дней, в течение которых владелец может находиться на территории, на которую виза действительна (41).Это пребывание может быть непрерывным или распространяться на несколько периодов до общего количества дней, разрешенных между датами, указанными в пункте 1.2, с учетом количества въездов, разрешенных в соответствии с пунктом 1.3.
ЕврЛекс-2
python — допустимые символы в строке
Для последовательностей ДНК небольшого размера (около тысячи символов) это практическая реализация
def is_valid_sequence (dna):
# базовый вариант
если len (dna) == 0:
вернуть True
# проверяем, правильный ли первый символ
elif dna [0] отсутствует в ['A', 'T', 'C', 'G']:
вернуть ложь
# в противном случае, рекурсию по остальным символам
еще:
вернуть is_valid_sequence (dna [1:])
print (is_valid_sequence ('AATGCGA')) # Истина
print (is_valid_sequence ('AATXGCGA')) # Ложь
Предупреждение
Будьте осторожны с рекурсией в Python — длинная строка dna
вызовет переполнение стека.Попытка проверить даже такую «большую» последовательность не удалась
GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATAG9
Этого легко избежать, реализовав is_valid_sequence
с использованием цикла в стиле Clojure
/ recur
для рекурсии с постоянным пространством
def recur (* значения):
возврат (повторение, значения)
def loop (f):
acc = f ()
в то время как type (acc) является кортежем, а acc [0] повторяется:
acc = f (* acc [1])
возврат в соотв.
def is_valid_sequence (dna):
# безопасная для стеков реализация цикла / повторения
# инициализировать переменную состояния цикла `s` значением` dna`
цикл возврата (лямбда s = dna:
# базовый вариант
Истинно, если len (s) == 0 иначе
# проверяем, действителен ли первый символ
Ложно, если s [0] не входит в ['A', 'T', 'C', 'G'] иначе
# else рекурсивно проходим остальные символы
повторяется (s [1:]))
# не переполняет стек
печать (is_valid_sequence ( 'GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACA GATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACAGATTACTACATAACAGATTACAGATAGTACAGATTACAGATTACAGATAG)
# Правда
Дальнейшие улучшения
Реализация цикла loop
/ recur
предоставляет дополнительную возможность настроить производительность нашей функции.Нарезка строки, как мы делали с dna [0]
и dna [1:]
, создает в памяти новых строк; это было необходимо только из-за API рекурсии, используемого в первой функции, которую мы написали
Интерфейс loop
/ recur
позволяет нам использовать любой тип данных, подходящий для вычисления нашего вывода — в этом случае подойдет простой целочисленный индекс. Об остальном позаботится лексическая область видимости — днк
доступен в нашей лямбде и не требует нарезки днк [1:]
, что сэкономит много времени / места для больших входных данных
def is_valid_sequence (dna):
# создать этот массив только один раз
valid_chars = ['A', 'T', 'C', 'G']
# инициализируем переменную состояния цикла `i` значением 0
цикл возврата (лямбда i = 0:
Истинно, если len (dna) == i else
Ложно, если dna [i] отсутствует в valid_chars else
повторять (я + 1))
Питон и неуправляемая лямбда
Обратите внимание, как мы были вынуждены использовать чистое выражение внутри лямбда вместо традиционного синтаксиса оператора if / elif / else
— это не проблема для простых программ, но более сложные программы может быть трудно выразить таким образом на Python .
Это работает аналогично программе выше, но использует простую старую функцию вместо лямбда
def is_valid_sequence (dna):
valid_chars = ['A', 'T', 'C', 'G']
# старая добрая функция; заменяет лямбду
def myloop (i = 0):
если len (dna) == 0:
вернуть True
elif dna [i] отсутствует в valid_chars:
вернуть ложь
еще:
вернуть повтор (я + 1)
# использовать простую старую функцию вместо лямбда
цикл возврата (myloop)
Метапрограммирование— Допустимые символы в имени класса Python
Это старый вопрос, но я хотел бы добавить ответ о том, как это сделать в Python 3, поскольку я сделал реализацию.
Допустимые символы описаны здесь: https://docs.python.org/3/reference/lexical_analysis.html#identifiers. Они включают в себя довольно много специальных символов, включая знаки препинания, подчеркивания и целый ряд иностранных символов. К счастью, модуль unicodedata
может помочь. Вот моя реализация, непосредственно реализующая то, что говорится в документации Python:
импорт unicodedata
def is_valid_name (имя):
если не _is_id_start (имя [0]):
вернуть ложь
для символа в имени [1:]:
если не _is_id_continue (символ):
вернуть ложь
return True # Разрешены все символы._allowed_id_continue_categories = {"Ll", "Lm", "Lo", "Lt", "Lu", "Mc", "Mn", "Nd", "Nl", "Pc"}
_allowed_id_continue_characters = {"_", "\ u00B7", "\ u0387", "\ u1369", "\ u136A", "\ u136B", "\ u136C", "\ u136D", "\ u136E", "\ u136F "," \ u1370 "," \ u1371 "," \ u19DA "," \ u2118 "," \ u212E "," \ u309B "," \ u309C "}
_allowed_id_start_categories = {"Ll", "Lm", "Lo", "Lt", "Lu", "Nl"}
_allowed_id_start_characters = {"_", "\ u2118", "\ u212E", "\ u309B", "\ u309C"}
def _is_id_start (символ):
вернуть unicodedata.category (символ) в _allowed_id_start_categories или символ в _allowed_id_start_categories или unicodedata.категория (unicodedata.normalize ("NFKC", символ)) в _allowed_id_start_categories или unicodedata.normalize ("NFKC", символ) в _allowed_id_start_characters
def _is_id_continue (символ):
вернуть unicodedata.category (символ) в _allowed_id_continue_categories или символ в _allowed_id_continue_characters или unicodedata.category (unicodedata.normalize ("NFKC", символ)) в _allowed_id_continue_categories или unicoded_characters_Callow ", символ
Этот код адаптирован отсюда под CC0: https: // github.com / Ghostkeeper / Luna / blob / d69624cd0dd5648aec2139054fae4d45b634da7e / plugins / data / enumerated / enumerated_type.py # L91. Это было хорошо протестировано.
допустимых символов для адресов электронной почты: полный список
Хотите знать, какие символы вы можете использовать в своем адресе электронной почты, а какие нет? Здесь вы найдете полный список из допустимых символов для адреса электронной почты .
Первый телефонный работник отрыгивает
Когда в 1970-х телефонные компании представили клавишу # на своих сенсорных телефонах, о ней, по-видимому, было много разговоров, а хорошего названия для нее не было.
Согласно одной из наименее вероятных этимологий для включения в словарь Мерриама-Вебстера, один служащий испустил газ, говоря о восьми (« octo — ») шипах символа, и поэтому он стал известен как octothorpe .
Как бы то ни было. Давайте выясним, можем ли мы использовать окторп в адресе электронной почты.
Допустимые символы для адресов электронной почты: полный список
Вот полный список всех символов, которые вы можете безопасно использовать в имени пользователя адреса электронной почты (как определено в стандартном документе RFC 5322: Формат сообщений Интернета):
Строчные | Заглавные | Числа | Специальные | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a | A | 0 | . | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
b | B | 1 | ? | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
c | C | 2 | ! | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
d | D | 3 | { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
e | E | 4 | } | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F | 6 | _ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
h | H | 7 | — | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
i | I | 8 | + | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
к | к | = | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
л | л | % | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
м | м | $ | o | O | ‘ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
p | P | ` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
q | Q | | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
r | R | ^ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
s | S | * | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
t | T | В | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Вт | Вт | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
x | X | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
y | Y | 903 Примечание : адреса электронной почты, в которых используются только эти символы, будут надежно работать даже с. |
Персонаж | Имя | Юникод |
---|---|---|
Космос | U + 0020 | |
! | восклицательный | U + 0021 |
” | Двойная кавычка | U + 0022 |
# | Цифровой знак (решетка) | U + 0023 |
$ | Знак доллара | U + 0024 |
% | процентов | U + 0025 |
и | Амперсанд | U + 0026 |
’ | Одиночная кавычка | U + 0027 |
( | Левая скобка | U + 0028 |
) | Правая скобка | U + 0029 |
* | Звездочка | U + 002A |
+ | плюс | U + 002B |
, | запятая | U + 002C |
– | минус | U + 002D |
. | Каре | U + 005E |
_ | Подчеркивание | U + 005F |
` | Могильный акцент (обратная кавычка) | U + 0060 |
{ | Левая скоба | U + 007B |
| | Вертикальная полоса | U + 007C |
} | Правая скоба | U + 007D |
~ | Тильда | U + 007E |
Тот же список, что и строка (в двойных кавычках): "!" # $% & '() * +, -._` {|} ~ "
Различные операционные системы и приложения могут накладывать ограничения на этот набор:
Примеры допустимых символов. | Скачать научную диаграмму
Контекст 1
... входные данные - важная, но несколько упускаемая из виду часть взаимодействия в трехмерных иммерсивных виртуальных средах. Хотя маловероятно, что кто-либо когда-либо будет заниматься серьезной обработкой текста в иммерсивной среде, для ввода небольших текстовых строк, таких как имена файлов или метки, требуется эффективный метод ввода текста.Было предложено множество методов ввода текста в VR, от простых решений, заимствованных с настольных компьютеров, таких как виртуальные клавиатуры «охота и клевание» [9], до более сложных подходов, требующих специализированного оборудования, такого как аккордовые клавиатуры [5], щипковые перчатки [1]. , и защитные перчатки [7]. В будущих методах ввода текста могут использоваться существующие и будущие достижения в области распознавания жестов [3] и голоса. Bowman et. al. [2] и Thomas et. al. [8] сравнили несколько современных методов ввода текста. В исследовании Боумена сравнивались виртуальная клавиатура, зажимная перчатка, аккордная клавиатура и упрощенная версия речи.Исследование предполагает, что каждый из интерфейсов имеет свои сильные и слабые стороны в зависимости от конкретной ситуации. Виртуальная клавиатура показала наилучший баланс между простотой и производительностью; однако усталость по-прежнему была проблемой. Распознавание символов - еще один способ расширения возможностей ввода текста. Виртуальный блокнот [6] дает представление о его ценности. Виртуальный блокнот позволял пользователям писать символы, слова и фигуры от руки с помощью ручного стилуса. Эти аннотации можно сохранить как серию штрихов пера и предоставить источники информации в виртуальном мире.Однако виртуальный блокнот не извлекал семантические (символьные) данные из чертежей. В будущем коммерческое программное обеспечение для распознавания рукописного ввода и методы оптического распознавания символов будут совершенствоваться и могут найти свое место в виртуальной реальности; однако сложность / доступность программного обеспечения в настоящее время является одним из нескольких препятствий. Наша система является одновременно упрощением и комбинацией виртуального блокнота и распознавания символов, что напоминает интерфейс ввода текста в Palm Pilot. Хотя наш интерфейс и близко не предлагает надежности сложных пакетов распознавания рукописного ввода, он предоставляет пользователю интуитивно понятный интерфейс для рисования символов, которые могут быть точно распознаны системой.Основной целью разработки CTD была простота - как с точки зрения пользовательского интерфейса, так и с точки зрения разработки. Наше желание состояло в том, чтобы создать виджет, который можно было бы легко интегрировать в наши существующие приложения VR, не создавая большого размера в среде с точки зрения физического / виртуального размера или вычислительных ресурсов. Чтобы сделать интерфейс максимально простым и интуитивно понятным, мы решили имитировать метафору пера и бумаги. «Виртуальная» часть CTD состоит из девяти маленьких черных сфер, выступающих из тонкой черной подложки (показано на рисунке 1).Сферы расположены в сетке 3x3, покрывающей высоту и ширину панели, которая составляет примерно 15 см x 15 см. Виртуальная панель выровнена с верхней частью стола, подиума или весла [4], чтобы обеспечить пассивную обратную связь по силе, так что, когда пользователь кладет стилус на физическую поверхность, кончик стилуса находится чуть выше виртуальной панели. Пока стилус лежит на панели, его можно перемещать по поверхности, чтобы пересечь любую из 9 сфер. Чтобы ввести символы с помощью CTD, пользователь должен положить перо на панель (как если бы он поместил перо на бумагу), удерживая кнопку пера и последовательно пересекая соответствующие сферы.Каждый раз, когда сфера пересекается, она становится белой, показывая, что она «включена». Когда пользователь переходит от одной сферы (или точки) к другой, между двумя (соседними) точками рисуется белая линия. Пользователь может использовать девять точек и соединительные линии, чтобы нарисовать разумное представление буквенно-цифрового символа. Как только пользователь закончил рисовать персонажа, он может отпустить кнопку стилуса, которая сообщает CTD, чтобы он попытался распознать нарисованный пользователем символ. В самом CTD есть список допустимых представлений символов, в котором указано, какие точки включены и какие линии нарисованы.Обратите внимание: порядок, в котором активируются точки и линии, не влияет на описание и распознавание символов. Как только пользователь отпускает кнопку стилуса, CTD сравнивает свое текущее состояние со своим списком представлений символов, и если совпадение найдено, в приложение отправляется событие нажатия клавиши. Некоторые из допустимых представлений символов показаны на рисунке 2. При использовании ручки и бумаги пользователь может оторвать ручку от бумаги, чтобы переместиться в другое место на бумаге, не делая отметок.Это важно при рисовании отдельных символов, таких как строчная буква «i», пересечение буквы «t» или просто пауза перед следующим штрихом пера. Эта функциональность отражается в интерфейсе CTD. Пока пользователь удерживает кнопку стилуса, он всегда может оторвать стилус от поверхности физического стола (или любой другой поверхности, используемой для силовой обратной связи), чтобы переместить стилус, не пересекая точки. Еще одна проблема удобства использования, связанная с дизайном CTD, - это его размер. Написание маленьких букв ручкой и бумагой - это, как правило, удобная и не требующая усилий задача для большинства людей, в которой задействованы только пальцы и запястье.И наоборот, рисование больших букв, требующее движений локтем или плечом, может быть утомительным. В настоящее время CTD представляет собой квадрат 15 см, что достаточно мало для большинства людей, чтобы пройти через каждую из девяти точек, используя позу рук, аналогичную той, в которой они держат ручку, и не требуя значительных движений локтя или плеча. При уменьшении утомляемости дальнейшее уменьшение площади CTD оказалось трудным из-за увеличения количества ошибок. По мере того, как точки на панели CTD становятся все ближе и ближе друг к другу, пользователям становится трудно пересечь намеченную точку, особенно когда они пытаются писать быстрее.Чтобы уменьшить количество ошибок при текущем размере CTD, мы скорректировали расположение и относительный размер точек. Во время тестирования CTD самостоятельно и с несколькими добровольцами мы заметили, что большинство ошибок возникало, когда пользователь достигал угловой точки. Вместо того, чтобы поразить цель, они вместо этого поразили бы другую или полностью промахнулись. Во многом это было связано с тем, что они не могли сдвинуть кончик иглы достаточно далеко, не поворачивая локоть. Вместо чистой сетки точек 3x3 мы решили немного сместить угловые точки к центру, что избавляет пользователя от необходимости дотягиваться так далеко, чтобы попасть в углы.Кроме того, мы также немного увеличили размер угловых точек, чтобы их было легче поразить (рис. 3). Мы считаем, что благодаря неофициальным наблюдениям и испытаниям эти небольшие изменения заметно улучшили удобство использования интерфейса. Конечно, никакой интерфейс не может полностью устранить человеческую ошибку; когда пользователь делает ошибку (пересекает неправильную точку), CTD не распознает нарисованный символ или, возможно, ошибочно принимает его за другой. Обычно это происходит, когда пользователь случайно пересекает точку, отличную от той, которую он намеревался, однако пользователь также может попытаться нарисовать символ способом, который CTD не распознает.Хотя мы заполнили список персонажей CTD множеством различных способов рисования каждого персонажа, это действительно происходит, особенно когда пользователь не знаком с интерфейсом. Мы решили не включать в CTD метод «стирания», который позволил бы пользователю отменить ошибочное пересечение точки. Мы исключили это из интерфейса в основном потому, что хотели сделать его как можно более простым, мы не хотели вводить модальные функции или дополнительные кнопки, которые могли бы затруднить изучение CTD.Вместо этого пользователю предлагается всегда отпускать стилус при возникновении ошибки. Когда перо отпускается, CTD пытается распознать символ как есть, что, в свою очередь, очищает выбранные точки и линии. Если символ не распознан, пользователь может просто повторить попытку. Если символ (кроме предполагаемого) распознан, пользователь может нарисовать символ «backspace», который представляет собой просто линию, пересекающую верхний ряд точек на панели. Возврат отправляется в приложение, как и любой другой символ, и должен удалить ошибочный символ.Существует множество различных способов реализации функции стирания, которая может предотвратить отправку ошибочных символьных событий в приложение; однако наиболее усложнит интерфейс. В настоящее время мы согласны с нашим решением отдать предпочтение простоте перед функциональностью, но это, безусловно, вопрос, заслуживающий дальнейшего анализа. В этом разделе мы даем краткое описание интерфейса, в котором описаны некоторые из наиболее важных концепций CTD.