首页 > 解决方案 > JavaScript:比较字符和重音字符

问题描述

我正在创建一个简单的像游戏一样的刽子手。用户可以输入一个“秘密句子”,然后玩家必须通过选择一个字母来猜测它。

由于该游戏将使用多种语言,如果玩家选择非重音字符,我想解决所有重音字符。例如:

IL CANE È BELLO.

如果玩家选择元音“e”,则只会解决没有重音的元音(游戏将字符与 === 进行比较)。相反,我希望游戏自动识别所有重音或不重音的字符(è,é,e ...)

我要折磨自己写一个检查每个重音字符的函数,但我想知道是否有更简单的方法。

到目前为止,这就是我的功能(我刚刚添加了 è 重音元音)

function isAccentedVowel(chosenChar, currentChar) {
    console.log('The user selected this char: ' + chosenChar)
    console.log('I\'m comparing it to this char: ' + currentChar)
    switch (chosenChar) {
        case 'E':
            if (currentChar === 'È') return true;
    }
}

注意:密句和每个字符都是大写的

标签: javascriptstringdiacritics

解决方案


您可以使用String#normalize将重音字符与其正常对应字符进行比较。

要进行比较,您需要首先从重音字符中获取/提取正常字符,如下所示。

string.normalize('NFD')

这将返回一个包含两个项目的数组。您现在可以将数组中的第一项与普通字符进行比较。

function isAccented(char, accentedChar) {
  return char === accentedChar.normalize('NFD')[0];
}

console.log(isAccented('E', 'È'));


推荐阅读