Мне нужен способ удалить не немецкие буквы и разрешить только определенные символы - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу gsub String, чтобы в конце у меня была строка с

  • только немецкие буквы и нормальные цифры
  • без специальных символов, кроме , . ? и !
  • без начальных или конечных непечатаемых символов
  • без последовательных непечатаемых символов, между словами должен быть только один пробел
  • не должно быть пробелов перед разрешенными специальными символами . , ? !
  • , и . не могут быть последними символами

Пример (на двух линиях, чтобы быть более заметным для вас):

'   §$%""%& Überschnell    du$§"rch   die Nacht .
    Genießen Sie Ihre Aussicht , Sie Blödm人物ann   !   $"§ '

Должно стать:

'Überschnell durch die Nacht. Genießen Sie Ihre Aussicht, Sie Blödmann!'

Надеюсь, понятно, что мне нужно, чтобы строка произошла. Это для более симпатичных названий в моем приложении Rails, когда пользователь вводит что-либо, что не является английским или немецким, или не заботится о правильной пунктуации или около того.

Редактировать: это то, что в данный момент работает нормально благодаря @ mudasobwa

irb(main):021:0> str='   §$%""%& Überschnell    du$§"rch   die Nacht .   Genießen Sie Ihre Aussicht , Sie Blödm??an>
=> "   \xF5$%\"\"%& \x9Aberschnell    du$\xF5\"rch   die Nacht .   Genie\xE1en Sie Ihre Aussicht , Sie Bl\x94dm??ann   !   $\"\xF5 "

irb(main):016:0> str=str.gsub(/\s\s+/, ' ')
=> " \xF5$%\"\"%& \x9Aberschnell du$\xF5\"rch die Nacht . Genie\xE1en Sie Ihre Aussicht , Sie Bl\x94dm??ann ! $\"\xF5 "

irb(main):017:0> str=str.gsub(/[^a-zA-z\s!?.,äöüÄÄÖÜß]/, "")
=> "  \x9Aberschnell durch die Nacht . Genie\xE1en Sie Ihre Aussicht , Sie Bl\x94dm??ann !  "

irb(main):018:0> str=str.gsub(/\s+([,.!?])/, "\\1")
=> "  \x9Aberschnell durch die Nacht. Genie\xE1en Sie Ihre Aussicht, Sie Bl\x94dm??ann!  "

irb(main):019:0> str=str.strip
=> "\x9Aberschnell durch die Nacht. Genie\xE1en Sie Ihre Aussicht, Sie Bl\x94dm??ann!"

irb(main):020:0> str=str.encode("UTF-8").unicode_normalize(:nfc)
=> "Überschnell durch die Nacht. Genießen Sie Ihre Aussicht, Sie Blödm??ann!"

Но когда в Windows я получаю Encoding::CompatibilityError: incompatible encoding regexp match (UTF-8 regexp with CP850 string)

Произойдет ли это в производственном приложении на HEroku или я могу просто использовать это, не беспокоясь ??

1 Ответ

0 голосов
/ 12 сентября 2018

Основная проблема здесь заключается в том, чтобы Юникод нормализовал ввод в :nfc форму :

'   §$%""%& Überschnell    du$§"rch   die Nacht . ' \
'Genießen Sie Ihre Aussicht , Sie Blödm人物ann   !   $"§ '.
  unicode_normalize(:nfc).  # ⇐ HERE
  gsub(/\s+([,.!?])/, "\\1").
  gsub(/[^a-zA-Z,.!?äöüÄÄÖÜß\s]/, "").
  strip.
  squeeze

#⇒ "Überschnel durch die Nacht. Genießen Sie Ihre Ausicht, Sie Blödman!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...