2013-07-21 5 views
5

멱등 원이 아닌 사용자 이름의 표준 표현을 얻는 가장 좋은 방법은 무엇입니까? 내가 파이썬에서이 작업을 수행 할 수있는 좋은 라이브러리를 찾고 있어요 http://labs.spotify.com/2013/06/18/creative-usernames/사용자 이름의 표준화

:

나는 스포티 파이와 같은 문제가 발생하지 않도록합니다. Spotify가 (멱등수인지 테스트하기 위해 표준화를 두 번 실행하면서) Spotify를 끝내지 않고, 내 프로젝트에 Twisted를 가져 오는 것이 약간의 잔인한 일인 것을 선호한다. 거기에는 독립 실행 형 라이브러리가 있는가?

사용자 이름을 사용할 때 대신 이메일 주소를 사용 하시겠습니까? 주요 사이트/회사는이 문제를 어떻게 처리합니까?

+0

당신이 비 ASCII 사용자 이름을 지원해야합니까 : 나는 조프와 트위스트 의존성을 제거? 대답이 "예"이고, 포기하고 그들이 한 일을한다면, 그것은 사소한 문제입니다. 그렇지 않으면' ''.join ([string.punctuation + string.ascii_lowercase + string.digits]의 c 인 경우 orig_username.lower()의 c에 대해 c)'. – AdamKG

+0

예, 비 ASCII를 지원해야합니다. –

+0

글쎄, 거기에 당신이 간다. 주요 플레이어가 어떻게 그것을 처리하는지에 관해서는 ... 나는 그들이 대부분을 차지하지 않는다고 가정합니다. 얼핏보기에 그다지 많은 노력을 기울이지 않은 사람들도 그렇게했습니다. 독립형 라이브러리에 대해서는 알지 못합니다. 그러나 지금 당장 팝업으로 나타나면 spotify 기사의 접근 방식을 사용하고 트위스트 된 코드 (MIT)를 복사하면 놀라지 않을 것입니다. – AdamKG

답변

1

먼저 너는 Unicode equivalence에 위키 백과의 기사를 읽어야한다. 주의 사항과 표준화 방법이 정규 형식의 유니 코드 문자열을 나타낼 수 있는지 설명합니다.

그런 다음 Python의 내장 모듈 unicodedata을 사용하여 유니 코드 문자열을 원하는 정규화 형식으로 정규화 할 수 있습니다.

코드 예제 : 몇 달 후이 글을 읽고있는 사람들을위한

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

:

스포티 파이 하드 종속성의 전체 무리없이 트위스트 끄집어되지 않은 모든 것을 사용하는 모듈 (Twisted는 완전히 노력없이 거의 제거 할 수 있으며, 버전 확인 목적으로 만 가져온 것입니다.) zope.interface는 뒤에 남은 유일한 의존성이지만, 상당한 노력으로 제거 가능해야합니다.

해당 모듈의 핵심은 unicodedata.normalize()입니다. 따라서 자체 구현을 롤아웃하려면 시작해야합니다. 그러나 다른 사람들이 말했듯이 조심해야합니다. 이것은 쉽게 악용 될 수있는 영역입니다.

편집 : https://gist.github.com/repole/7548478