替换 Javascript 中的变音符号

新手上路,请多包涵

如何在 javascript 中用“正常”形式(a、s、t)替换变音符号(ă、ş、ţ 等)?

原文由 Paul Grigoruta 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 342
2 个回答

如果您想完全在客户端完成,我认为您唯一的选择是使用某种查找表。这是一个起点,由一个名叫 Olavi Ivask 的小伙子在他的 博客 上写的……

 function replaceDiacritics(s)
{
    var s;

    var diacritics =[
        /[\300-\306]/g, /[\340-\346]/g,  // A, a
        /[\310-\313]/g, /[\350-\353]/g,  // E, e
        /[\314-\317]/g, /[\354-\357]/g,  // I, i
        /[\322-\330]/g, /[\362-\370]/g,  // O, o
        /[\331-\334]/g, /[\371-\374]/g,  // U, u
        /[\321]/g, /[\361]/g, // N, n
        /[\307]/g, /[\347]/g, // C, c
    ];

    var chars = ['A','a','E','e','I','i','O','o','U','u','N','n','C','c'];

    for (var i = 0; i < diacritics.length; i++)
    {
        s = s.replace(diacritics[i],chars[i]);
    }

    document.write(s);
}

您可以看到这只是一组用于已知变音符号的正则表达式,将它们映射回“普通”字符。

原文由 Paul Dixon 发布,翻译遵循 CC BY-SA 2.5 许可协议

在现代浏览器和 node.js 中,您可以使用 unicode 规范化 来分解这些字符,然后使用过滤正则表达式。

str.normalize('NFKD').replace(/[^\w]/g, '')

如果你想允许空格、破折号等字符,你应该扩展正则表达式以允许它们。

str.normalize('NFKD').replace(/[^\w\s.-_\/]/g, '')

 var str = 'áàâäãéèëêíìïîóòöôõúùüûñçăşţ';
var asciiStr = str.normalize('NFKD').replace(/[^\w]/g, '');
console.info(str, asciiStr);

注意: 此方法不适用于没有由 unicode 组成的 varian 的字符。即 øł

原文由 pakopa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题