2013-07-21 11 views
5

冪等元であるユーザ名の正規表現を取得する最良の方法は何ですか?私はPythonでこれを行うには良いライブラリを探していますhttp://labs.spotify.com/2013/06/18/creative-usernames/ユーザ名の正規化

は、私が楽しんでるのと同じ問題を抱えないようにしたいです。私は、Spotifyが何度もやっていることをやめたいと思っています(それが冪等であるかどうかをテストするために正規化を2回実行しています)、そして私のプロジェクトにTwistedをインポートすることは少し過度のものです。

ユーザー名の代わりに電子メールアドレスを使用することをお勧めしますか?主要なサイト/企業はどのようにこれに対処していますか?

+0

あなたは、ASCII以外のユーザー名をサポートする必要がありますか?答えが「はい」で、あきらめて、やったことをすれば、それは重要な問題ではありません。そうでない場合、 ''' .join(string.punctuation + string.ascii_lowercase + string.digits)の' cの場合、orig_username.lower()のcのためのc) ''。 – AdamKG

+0

はい、非asciiをサポートする必要があります。 –

+0

さて、そこに行く。メジャー選手がどのようにそれを処理するかについては...私は、ほとんどの場合、そうではないと仮定します。スポットライトと同じくらい多大な努力を払ったことのある人。スタンドアロンのライブラリはわかりませんが、今注目している記事からのアプローチを使用し、関連コードをねじれからコピーするだけです(それはMITです)。 – AdamKG

答えて

1

最初に、あなたはUnicode equivalenceに関するWikipediaの記事を読むべきです。これは、正規表現形式でUnicode文字列を表現するための注意点と正規化方法について説明しています。

次に、Pythonの組み込みモジュールunicodedataを使用して、Unicode文字列を標準正規化形式に正規化することができます。

コード例:数ヶ月後にこれを読んで、誰のために

>>> import unicodedata 
>>> unicodedata.normalize('NFKC', u'ffñⅨffi⁵KaÅéᴮᴵᴳᴮᴵᴿᴰ') 
'ffñIXffi5KaÅéBIGBIRD' 
>>> unicodedata.normalize('NFKC', u'ffñⅨffi⁵KaÅéᴮᴵᴳᴮᴵᴿᴰ').lower() 
'ffñixffi5kaåébigbird' 
0

Spotifyはハード依存関係の全体の束なしツイストの撤退をされていないすべてのことに使用するモジュール(Twistedは、労力をかけずに完全に削除することができます。バージョンチェックの目的でのみインポートされます)。 zope.interfaceは残された唯一の依存関係ですが、かなりの労力で取り外し可能でなければなりません。

このモジュールの中心はunicodedata.normalize()なので、独自の実装をロールアウトしたい場合は、それを開始する必要があります。しかし、他の人たちと同じように、注意してください、これは容易な悪用に開放された領域です。

編集:私は、Zopeのとねじれた依存関係を取り除か:https://gist.github.com/repole/7548478