Каковы должны быть допустимые символы в именах пользователей? [закрытый]

Много веб-систем аутентификации пользователя не позволяют имена пользователей, которые содержат символы кроме букв, чисел и символов нижнего подчеркивания.

Могла быть техническая причина этого?

22
задан Emanuil Rusev 24 September 2012 в 08:43
поделиться

8 ответов

Хорошо оформленная система не обязательно должна предотвратить любые специальные символы в имена пользователя.

, которые сказали, что причина подчеркивает традиционно принято, заключается в том, что подчеркивание обычно рассматривается как «слово» характер, наряду с буквами и цифрами. Обычно это единственный другой характер, учитывая это различие. Это верно в регулярных выражениях, и даже на базовом уровне в большинстве операционных систем (введите подчеркивание словами и дважды щелкнуть буквы. Выделение простится мимо подчеркивания. Теперь попробуйте одинаковую с помощью приборной панели, это, скорее всего, будет нет.)

16
ответ дан 29 November 2019 в 04:12
поделиться

Основная причина, по которой веб-сайты обеспечивают применение таких правил, это доступно (потому что Имена пользователей, как ~ - | Это <> один | - ~ раздражает). Это также может быть, потому что это меньше работы (подчеркивает подчеркивание \ W + Regex, пока тире и другие специальные символы не относятся), но я сомневаюсь, что это важной причиной.

Нет «стандарта», поэтому, если ни одна из вышеуказанных причин вас не беспокоит, делай все, что вы хотели бы. Лично я хотел бы видеть больше сайтов принимать тире и периоды, но это действительно является личным предпочтением читаемости и согласованности VS.

2
ответ дан 29 November 2019 в 04:12
поделиться

Люди могут захотеть написать свои имена пользователей, таких как_Эта, а не шлики или лики.

-121--1604009-

Поскольку он позволяет нескольким словам быть представленным несколько читаемым образом.

Peronally I Действительно, Действительно Желание люди немного расширяют вещи, чтобы позволить тире и апострофам. Это позволило бы людям использовать не-английские фонетические имена (например, коренные американские племенные имена, такие как She-Ki и Ke`XSHSA-TSE)

3
ответ дан 29 November 2019 в 04:12
поделиться

Зависит от того, как используются ваши имена пользователей. Там нет общего правила, не зная контекста.

1
ответ дан 29 November 2019 в 04:12
поделиться

Мне не нравится аргумент для чтения, когда он мешает людям использовать свой родной язык в именах пользователя.

Я рекомендую вам экспериментировать с использованием классов символов, которые включают http://msdn.microsoft.com/en-us/library/20bw873z.aspx#supportededeNicodegeneralceadegories или http: // msdn. Microsoft.com/en-us/library/20bw873z.aspx#supportednamedblocks. Я не пробовал это, но

[\p{L}\p{N}\p{M}]

может стоить эксперимента.

3
ответ дан 29 November 2019 в 04:12
поделиться

Если вы перемещаете вещи так, что объект с несколькими массивами создается с помощью параматера:

#include "boost/multi_array.hpp"
#include <iostream>

class Influx {
public:
    Influx ( unsigned int num_elements ) :
        foo( boost::extents[ num_elements ] )
    {
    }
    boost::multi_array<int,1> foo;
 };

int main(int argc, char* argv[])
{
    Influx influx(10);
    influx.foo[3] = 5;
    int val = influx.foo[3];
    std::cout << "Contents of influx.foo[3]:" << val << std::endl;
    return 0;
}

Я думаю, что то, что происходило для вас, это то, что вы создали foo, когда был создан объект Influx, но затем вы снова устанавливаете его, так что когда люди называют это, случаются плохие вещи.

Мне удалось получить вышеуказанный код, работающий на MS VS 2008.

-121--3950623-

Я довольно успешно использовал GCCXML на достаточно крупных проектах. Вы получаете XML-представление кода C (включая структуры), которое можно постобработать с помощью простого Python.

-121--2467956-

Возможно, люди захотят написать свои имена пользователей like_this а не likethis или LikeThis.

0
ответ дан 29 November 2019 в 04:12
поделиться

Если не указано, я использую следующее:

^\w(?:\w*(?:[.-]\w+)?)*(?<=^.{4,32})$

Для этого требуется длина 4 с максимальным количеством 32 символов. Она должна начинаться со словесного символа и может иметь не сплошные точки и тире. Единственная причина, по которой я использую это, заключается в том, что оно достаточно строго интегрируется почти со всем :)

Valid :

test.tost

Invalid :

test...tost

7
ответ дан 29 November 2019 в 04:12
поделиться

Продуманная система не обязательно должна предотвращать использование каких-либо специальных символов в именах пользователей.

Это говорит, что причина подчеркивания традиционно принимается, что подчеркивание обычно рассматривается как символ «слово», наряду с буквами и цифрами. Это, как правило, единственный другой символ с учетом этого различия. Это верно в регулярных выражениях и даже на базовом уровне в большинстве операционных систем (введите подчеркивание в слове и дважды щелкните буквы. Выделенный фрагмент выходит за рамки подчеркивания. Теперь попробуйте то же самое с тире, скорее всего, не будет.)

-121--1604000-

У вас были две разные проблемы. Обе проблемы привели к одному и тому же исключению, но не были связаны друг с другом:

Первая проблема

В вашем первом подходе ваш код был верным и работал хорошо, за исключением проблемы здесь:

SCurrent.Status = MyCustControl.Status.Sixth;

Имя «Status» используется и как статический член, и как член экземпляра. Думаю, вы неправильно вставили код в свой вопрос.

Также может потребоваться добавить следующее после меню MireItem = sender as MireItem; , в зависимости от конкретной ситуации:

  if(menu==null) return;

Вторая проблема

Во втором подходе вы использовали «sender» вместо «e.Source.» Следующий код работает по желанию:

private void RequeryCommand_Executed(object sender, ExecutedRoutedEventArgs e)    
{    
    IInputElement parent = (IInputElement)LogicalTreeHelper.GetParent((DependencyObject)e.Source);
      // Changed "sender" to "e.Source" in the line above
    MyCustControl SCurrent = new MyCustControl();    
    SCurrent = (MuCustControl)parent;    
    string str = SCurrent.Name.ToString();// Error gone
    MessageBox.Show(str);    
}

Final Note

Note: Нет причин связывать CommandParameter для этого, если вы используете командный подход. Он значительно медленнее и занимает больше кода. .Источник всегда будет исходным объектом, поэтому нет необходимости использовать CommandParameter , поэтому используйте его вместо этого.

-121--3046007-

Подчеркивание традиционно допускалось в идентификаторах на большинстве языков программирования и обычно было единственным «специальным» символом.
Но многие веб-логин по-прежнему не принимают какой-ЛИБО специальный символ и ограничены нижние/верхние регистры символов и цифр...
И другие прекрасно относятся к действительно особым; -)

1
ответ дан 29 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

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