Много веб-систем аутентификации пользователя не позволяют имена пользователей, которые содержат символы кроме букв, чисел и символов нижнего подчеркивания.
Могла быть техническая причина этого?
Хорошо оформленная система не обязательно должна предотвратить любые специальные символы в имена пользователя.
, которые сказали, что причина подчеркивает традиционно принято, заключается в том, что подчеркивание обычно рассматривается как «слово» характер, наряду с буквами и цифрами. Обычно это единственный другой характер, учитывая это различие. Это верно в регулярных выражениях, и даже на базовом уровне в большинстве операционных систем (введите подчеркивание словами и дважды щелкнуть буквы. Выделение простится мимо подчеркивания. Теперь попробуйте одинаковую с помощью приборной панели, это, скорее всего, будет нет.)
Основная причина, по которой веб-сайты обеспечивают применение таких правил, это доступно (потому что Имена пользователей, как ~ - | Это <> один | - ~
раздражает). Это также может быть, потому что это меньше работы (подчеркивает подчеркивание \ W +
Regex, пока тире и другие специальные символы не относятся), но я сомневаюсь, что это важной причиной.
Нет «стандарта», поэтому, если ни одна из вышеуказанных причин вас не беспокоит, делай все, что вы хотели бы. Лично я хотел бы видеть больше сайтов принимать тире и периоды, но это действительно является личным предпочтением читаемости и согласованности VS.
Люди могут захотеть написать свои имена пользователей, таких как_Эта, а не шлики или лики.
-121--1604009-Поскольку он позволяет нескольким словам быть представленным несколько читаемым образом.
Peronally I Действительно, Действительно Желание люди немного расширяют вещи, чтобы позволить тире и апострофам. Это позволило бы людям использовать не-английские фонетические имена (например, коренные американские племенные имена, такие как She-Ki и Ke`XSHSA-TSE)
Зависит от того, как используются ваши имена пользователей. Там нет общего правила, не зная контекста.
Мне не нравится аргумент для чтения, когда он мешает людям использовать свой родной язык в именах пользователя.
Я рекомендую вам экспериментировать с использованием классов символов, которые включают 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}]
может стоить эксперимента.
Если вы перемещаете вещи так, что объект с несколькими массивами создается с помощью параматера:
#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.
Если не указано, я использую следующее:
^\w(?:\w*(?:[.-]\w+)?)*(?<=^.{4,32})$
Для этого требуется длина 4 с максимальным количеством 32 символов. Она должна начинаться со словесного символа и может иметь не сплошные точки и тире. Единственная причина, по которой я использую это, заключается в том, что оно достаточно строго интегрируется почти со всем :)
Valid :
test.tost
Invalid :
test...tost
Продуманная система не обязательно должна предотвращать использование каких-либо специальных символов в именах пользователей.
Это говорит, что причина подчеркивания традиционно принимается, что подчеркивание обычно рассматривается как символ «слово», наряду с буквами и цифрами. Это, как правило, единственный другой символ с учетом этого различия. Это верно в регулярных выражениях и даже на базовом уровне в большинстве операционных систем (введите подчеркивание в слове и дважды щелкните буквы. Выделенный фрагмент выходит за рамки подчеркивания. Теперь попробуйте то же самое с тире, скорее всего, не будет.)
-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
, поэтому используйте его вместо этого.
Подчеркивание традиционно допускалось в идентификаторах на большинстве языков программирования и обычно было единственным «специальным» символом.
Но многие веб-логин по-прежнему не принимают какой-ЛИБО специальный символ и ограничены нижние/верхние регистры символов и цифр...
И другие прекрасно относятся к действительно особым; -)