2009-02-06 1 views
10

이미 매우 similar question입니다. 당신이 또한 공간, 점, 대시를 제거 통지하고, 누가 어떤 다른 알고 때까지, 경이를 작동다른 특수 문자를 보존하면서 문자열에서 액센트/발음 구별 기호를 제거합니다. (시도한 mb_chars.normalize 및 iconv)

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s 

: 솔루션 중 하나는 이와 같은 코드를 사용합니다.

처음 코드가 어떻게 작동하는지 잘 모르겠지만, 스트립으로 만들 수 있습니다. 악센트가 있습니까? 아니면 최소한 보존 할 문자 목록을 받아야합니까? regexps '에 대한 나의 지식은 작은, 그러나 나는 (아무 소용) 시도 :

string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub 
    (/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s 

흉포 :

/[^\-x00-\x7F]/n # So it would leave the dash alone 

는이 같은 뭔가를하려고 해요? 예 ...

는 또한 시도했다 :

iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1 
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é" 

도와주세요?

답변

11

공백, 점, 대시 및 다른 사람을 알고있는 사람도 제거합니다.

하지 않아야합니다.

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s 

실수로 입력 한 경우 x00 앞에 백 슬래시가 있어야 NUL 문자를 참조 할 수 있습니다.

/[^\-x00-\x7F]/n # So it would leave the dash alone 

'\'와 'x'사이에 '-'을 삽입하면 null 문자에 대한 참조가 깨져서 범위를 벗어납니다.

+0

오, 영주 ... 나를 용서해주십시오. 고마워요! – Ivan

+0

예, 우리는 모두 가장 간단한 오타로 인한 디버깅 혼란을 지루하게했습니다! – bobince

+1

공백은 어떻게됩니까? 그것은 공백을 보존하지 못합니다. –