在JavaScript字符串中去除umlauts或特殊字符

4
以英译中:

以前从未在JavaScript字符串中使用过umlauts或specialchars。 我的问题是如何删除它们?

例如,我在JavaScript中有这个:

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

结果是拜仁慕尼黑,很容易,但现在我想删除umlaut或特殊字符,例如:

希洪体育会。

我该如何实现这一点?
顺祝商祺,
弗兰克

评论某人的答案,您需要使用“添加评论”链接--如果您添加答案,该人将不会收到任何通知,可能不会回来查看。我看到您代码中唯一的问题是第一行缺少引号。jQuery 不应该是问题,对我来说可以工作:http://jsbin.com/axasa4 现在,文字字符可能会遇到编码问题,因此您可能希望改用 Unicode 转义:http://jsbin.com/axasa4/2 - T.J. Crowder
T.J.,编码不应该是问题,因为两个“ü”字符都写在同一页上。 (在评论中达成一致,缺少引号和jQuery) - Martijn
@Martijn:我对输入来自其他地方的想法持开放态度,比如人们使用错误的编码提供页面等等。 - T.J. Crowder
相关问题:https://dev59.com/WWgt5IYBdhLWcg3wygab - Max
显示剩余2条评论
2个回答

13

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转义。因此,例如,上面的内容将是:

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

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


只要字符始终为ü,这样就可以了 :) - Sarfraz
@Sarfraz:那是他的例子,但我正在编辑更一般的解决方案。 :-) - T.J. Crowder
3
请注意,由于拜仁慕尼黑是德国的,您应该遵循德国规则,并将 'ü' 替换为 'ue' ... :-) - Martijn
2
@Martijn 作为一个德国人,我会说只要是拜仁慕尼黑,谁在乎呢? :-) - cg.
这些字符的完整列表是否可用? - Tom
显示剩余2条评论

1

有一个名为“remove-accents”的npm包。

  1. 安装包:npm i remove-accents
  2. 导入remove函数:import { remove } from "remove-accents";
  3. 使用函数:remove(inputString)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接