Я хочу 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 или я могу просто использовать это, не беспокоясь ??