удалить умлауты или спецчары в строке javascript - PullRequest
3 голосов
/ 26 января 2011

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

Например, у меня есть это в javascript:

var oldstr = "Bayern München";
var str = oldstr.split(' ').join('-');

Результат Бавария-Мюнхен ок легко, но теперь я хочу удалить умлаут или спецчар, как:

Реальный Спортинг Хихон.

Как мне это понять?

С уважением,

Фрэнк

1 Ответ

8 голосов
/ 26 января 2011

replace должен быть в состоянии сделать это за вас, например:

var str = str.replace(/ü/g, 'u');

... конечно ü и u являются не одной и той же буквой.: -)

Если вы пытаетесь заменить все символы вне заданного диапазона чем-то (например, -), вы можете сделать это, указав диапазон:

var str = str.replace(/[^A-Za-z0-9\-_]/g, '-');

Это заменяет все символы, которые не являются английскими буквами, цифрами, - или _ на -.(Диапазон символов составляет [...] бит, ^ в начале означает «не».) Вот живой пример .

Но это («Бавария-М-нчен»") Мистеру Мюнхену может быть немного неприятно смотреть.:-) Вы можете использовать функцию, переданную в replace, чтобы попытаться просто отбросить диакритические знаки:

var str = str.replace(/[^A-Za-z0-9\-_]/g, function(ch) {
  // Character that look a bit like 'a'
  if ("áàâä".indexOf(ch) >= 0) { // There are a lot more than this
    return 'a';
  }
  // Character that look a bit like 'u'
  if ("úùûü".indexOf(ch) >= 0) { // There are a lot more than this
    return 'u';
  }
  /* ...long list of others...*/
  // Default
  return '-';
});

Живой пример

Выше оптимизировано для длинных строк,Если сама строка короткая, вам лучше использовать повторные регулярные выражения:

var str = str.replace(/[áàâä]/g, 'a')
             .replace(/[úùûü]/g, 'u')
             .replace(/[^A-Za-z0-9\-_]/g, '-');

... но это умозрительно.

Обратите внимание, что буквенные символы в строках JavaScript вполне подходят, ноВы можете повеселиться с кодированием файлов.Я склонен придерживаться Unicode Escape.Так, например, выше было бы:

var str = str.replace(/[\u00e4\u00e2\u00e0\u00e1]/g, 'a')
             .replace(/[\u00fc\u00fb\u00f9\u00fa]/g, 'u')
             .replace(' ','-');

... но опять же, есть лот еще сделать ...

...