мне нужно заменить специальные символы, такие какКак создать удобочитаемую нормализованную строку?
- ü -> уе
- А -> ае
- Шахматный -> е
в строке. что это лучший способ сделать это?
мне нужно заменить специальные символы, такие какКак создать удобочитаемую нормализованную строку?
в строке. что это лучший способ сделать это?
После поиска в Интернете я не нашел ничего подходящего. Поэтому я закончил писать свои собственные.
normalize = (s) ->
mapping =
'ä': 'ae'
'ö': 'oe'
'ü': 'ue'
'&': 'and'
'é': 'e'
'ë': 'e'
'ï': 'i'
'è': 'e'
'à': 'a'
'ù': 'u'
'ç': 'c'
"'": ''
'´': ''
r = new RegExp(Object.keys(mapping).join('|'), 'g')
s.replace(r, (s)->
mapping[s]
)
Шаги Char-by-char в JS ужасно медленны. Лучшее решение состоит в том, чтобы автоматически создавать regexp, который охватывает все ключи от сопоставления и заменяет значения с помощью функции в качестве аргумента для 'String.replace'. –
oleg, как вам это нравится? – reco
Да. Хорошо, что вы должны инициализировать r только один раз! –
Рассмотрите encodeURIComponent (и соответствующий декодер).
Пример, приведенный на этой странице: W3Schools
var uri="http://w3schools.com/my test.asp?name=ståle&car=saab";
document.write (encodeURIComponent (URI));
Выход:
http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dst%C3%A5le%26car%3Dsaab
Обратите внимание на А в середине становится %C3%A5
.
Если вы не возражаете, * @ - _ + . /
не кодируется, есть также escape() (и unescape()).
EDIT в свете «читабельной» требование:
Будьте осторожны, что вы покрываете все символы, которые могут возникнуть, выполнив «ое» замены типа, и что вы никогда не пытаться преобразовать их читабельными «вернется к своей первоначальной форме, или вы испортите вещи в трансформации. Это точка методов побега и unescape.
Рассмотрите возможность применения escape/unescape после вашего собственного преобразования, чтобы поймать любые оставшиеся неожиданные символы.
Я думал об этом, но нам нужно что-то читаемое человеком ... может быть, я должен был бы назвать функцию humanNurmalize :) – reco
Вы должны исправить свой внутренний код, чтобы он мог обрабатывать специальные символы. – SLaks
Если вы каким-то образом не можете следовать рекомендациям SLaks, вы должны сначала сформулировать, что для вас является «особенным» (или «нормальным»), и тем, что вы хотите заменить. –
большая часть нашего приложения находится на клиенте ... разговаривая с сервером, чтобы получить нормализованную строку, требуется много времени и переполняет нет? – reco