删除javascript字符串中的变音符号或特殊字符

时间:2011-01-26 13:06:18

标签: javascript diacritics

以前从未在javascript字符串中播放过变音符号或特殊字符。我的问题是如何删除它们?

例如我在javascript中有这个:

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

结果是Bayern-München很容易,但现在我想删除变音符号或者特殊字符号:

  

Real SportingdeGijón。

我怎么能意识到这一点?

亲切的问候,

1 个答案:

答案 0 :(得分:8)

replace应该可以为你做到,例如:

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

...当然üu 不是相同的字母。 : - )

如果您尝试使用某些内容(例如-)替换给定范围之外的所有字符,则可以通过指定范围来执行此操作:

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

用<{1}}替换所有字符,这些字符不是英文字母,数字,-_。 (字符范围是-位,开头的[...]表示“不”。)Here's a live example

但是那个(“Bayern-M-nchen”)可能让慕尼黑先生看起来有点不愉快。 :-)您可以使用传递给^的函数来尝试删除变音符号:

replace

Live example

以上针对长字符串进行了优化。如果字符串本身很短,那么重复的regexp可能会更好:

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 '-';
});

......但这是推测性的。

请注意,JavaScript字符串中的文字字符完全正常,但您可以通过编码文件来充满乐趣。我倾向于坚持unicode逃脱。例如,上面的内容将是:

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

...但是,还有一个很多要做的事情......