用户名的规范化

时间:2013-07-21 22:24:55

标签: python username canonicalization

获得幂等用户名的规范表示的最佳方法是什么?

我希望避免遇到与Spotify相同的问题:http://labs.spotify.com/2013/06/18/creative-usernames/

我正在寻找一个很好的库来用Python做到这一点。我宁愿不做Spotify最终做的事情(运行规范化两次以测试它是否是幂等的),并且将Twisted导入我的项目有点过分,是否有一个独立的库?

在用户名方面,首选使用电子邮件地址吗?主要网站/公司如何处理这个问题?

2 个答案:

答案 0 :(得分:1)

首先,你应该阅读维基百科关于Unicode equivalence的文章。它解释了警告以及规范化方法以规范形式表示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'

答案 1 :(得分:0)

对于几个月后阅读此内容的人:

Spotify使用的模块并不是很难在没有一大堆依赖关系的情况下退出Twisted(Twisted可以完全删除而不费力,它只是为了版本检查而导入)。 zope.interface是唯一留下的依赖,虽然它应该可以通过一点点的努力去除。

该模块的核心是unicodedata.normalize(),所以如果你想推出自己的实现,那就是你应该开始的地方。但就像其他人所说的那样,要小心,这是一个容易被利用的领域。

编辑:我剥离了zope和扭曲的依赖关系:https://gist.github.com/repole/7548478