多くのWebベースのユーザー認証システムでは、文字、数字、アンダースコア以外の文字を含むユーザー名は許可されていません。
それには技術的な理由がありますか?
適切に設計されたシステムでは、必ずしもユーザー名に特殊文字を使用する必要はありません。
とは言っても、アンダースコアが伝統的に受け入れられてきた理由は、アンダースコアが通常、文字と数字と共に「Word」文字として扱われるためです。これは通常、この区別が与えられている他の唯一のキャラクターです。これは正規表現に当てはまり、ほとんどのオペレーティングシステムの基本レベルでも同じです(Wordにアンダースコアを入力して文字をダブルクリックします。選択範囲はアンダースコアを越えて拡張されます。今度はダッシュで同じことを試してください。しない。)
はい:特殊文字をエスケープする必要を回避します。怠惰なプログラマーは、ユーザーが入力したものをコードのどこかに直接ドロップするだけで、これがインジェクション攻撃につながります。
悪意を持って使用されていなくても、他の場所で競合する文字をユーザーが入力できるようにすると、必要以上に面倒になる可能性があります。たとえば、アップロードを保存するためにユーザーごとにファイルシステムディレクトリを作成する場合、ユーザー名はそのOSのディレクトリ命名規則に準拠している必要があります(Windowsでは\/:*?"<>|
など)。
ディレクトリに名前を付けるような衝突を回避し、インジェクション攻撃を回避するために"';%
と//
を取り除いたら、ほとんどの句読点を削除し、「なぜユーザー名に句読点が必要なのか」 ?
ユーザー名を[a-zA-Z0-9_]
に対して検証するための簡単な正規表現を記述してそれを実行する方が、衝突しないすべての可能な句読点を理解したり、何らかの方法で他の文字にマッピングしたりするよりもはるかに簡単です。
次に、コンピューティングの多くのことと同様に、十分な数のユーザーがユーザー名に文字、数字、アンダースコアのみを使用し始め、ユーザーがその仕様に従ってユーザー名を作成し始めるとすぐに、事実上の標準になり、永続します。
指定されていない場合、これを使用します。
^\w(?:\w*(?:[.-]\w+)?)*(?<=^.{4,32})$
これには、長さ4、最大32文字が必要です。 Wordの文字で始まる必要があり、連続していないドットやダッシュを含めることができます。私がこれを使用する唯一の理由は、ほとんどすべてのものと統合するのに十分厳しいためです:)
有効:
test.tost
無効:
test..tost
これらの文字(またはASCIIそれらのサブセット)にさえも)を制限すると、????????????????のようなユーザー名が受け入れられなくなります。これらを受け入れないことによって文字を使用すると、広範囲のユーザー名や、他のユーザー名に似たユーザー名を防ぐことができます。
ユーザーが母国語をユーザー名で使用する能力を妨げる可読性の引数は好きではありません。
http://msdn.Microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories または http://msdn.Microsoftを組み込んだ文字クラスを使用して実験することをお勧めします.com/en-us/library/20bw873z.aspx#SupportedNamedBlocks 。私はこれを試していませんが、
[\p{L}\p{N}\p{M}]
実験に値するかもしれません。
これは、複数の単語を多少読みやすい方法で表すことができるためです。
完全に私は本当にreallyダッシュとアポストロフィを使用できるように少し拡張してほしいと思います。これにより、英語以外の音声名を使用できるようになります(例:She-KiやKe`Xthsa-Tseなどのネイティブアメリカンの部族名)
Webサイトがこのようなルールを適用する主な理由は、読みやすさです(~-|this<>one|-~
のようなユーザー名は煩わしいため)。また、作業が少ないためかもしれません(アンダースコアは\w+
正規表現で一致しますが、ダッシュやその他の特殊文字は一致しません)。しかし、それが主な理由だとは思いません。
「標準」はないので、上記のどちらの理由も気にならない場合は、好きなようにしてください。個人的にはダッシュやピリオドを受け入れるウェブサイトをもっと増やしてほしいですが、それは実際には読みやすさと一貫性対表現の個人的な好みです。
ユーザー名の使用方法によって異なります。コンテキストを知らない限り、一般的なルールはありません。
アンダースコアは、ほとんどのプログラミング言語の識別子で伝統的に許可されており、一般に許可されている唯一の「特殊」文字でした。
しかし、多くのWebログインはまだ特殊文字を受け入れず、小文字/大文字と数字に制限されています...
そして他のものは本当に特別なもので結構です;-)
ユーザーは、ユーザー名をlikethisやLikeThisではなくlike_thisで記述したい場合があります。