2012-06-15 1 views
1

мне нужно заменить специальные символы, такие какКак создать удобочитаемую нормализованную строку?

  • ü -> уе
  • А -> ае
  • Шахматный -> е

в строке. что это лучший способ сделать это?

+2

Вы должны исправить свой внутренний код, чтобы он мог обрабатывать специальные символы. – SLaks

+0

Если вы каким-то образом не можете следовать рекомендациям SLaks, вы должны сначала сформулировать, что для вас является «особенным» (или «нормальным»), и тем, что вы хотите заменить. –

+0

большая часть нашего приложения находится на клиенте ... разговаривая с сервером, чтобы получить нормализованную строку, требуется много времени и переполняет нет? – reco

ответ

2

После поиска в Интернете я не нашел ничего подходящего. Поэтому я закончил писать свои собственные.

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] 
) 
+0

Шаги Char-by-char в JS ужасно медленны. Лучшее решение состоит в том, чтобы автоматически создавать regexp, который охватывает все ключи от сопоставления и заменяет значения с помощью функции в качестве аргумента для 'String.replace'. –

+0

oleg, как вам это нравится? – reco

+0

Да. Хорошо, что вы должны инициализировать r только один раз! –

2

Рассмотрите 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 после вашего собственного преобразования, чтобы поймать любые оставшиеся неожиданные символы.

+0

Я думал об этом, но нам нужно что-то читаемое человеком ... может быть, я должен был бы назвать функцию humanNurmalize :) – reco

 Смежные вопросы

  • Нет связанных вопросов^_^