javascript - 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;
}
}
注意:密句和每个字符都是大写的
解决方案
您可以使用String#normalize
将重音字符与其正常对应字符进行比较。
要进行比较,您需要首先从重音字符中获取/提取正常字符,如下所示。
string.normalize('NFD')
这将返回一个包含两个项目的数组。您现在可以将数组中的第一项与普通字符进行比较。
function isAccented(char, accentedChar) {
return char === accentedChar.normalize('NFD')[0];
}
console.log(isAccented('E', 'È'));
推荐阅读
- ios - 应用程序无法启动“没有这样的过程”/证书不受信任的问题
- ios - Detox iOS 创建强密码功能
- squish - Squish 工具在哪里?
- flutter - 发生异常。FlutterError (setState() 在 dispose() 之后调用:_MyProfileState#c3ad1(lifecycle state: defunct, notmounted)
- android - Android Manifest 属性取决于 SDK 版本
- asp.net-core - System.Web.Security.FormsAuthenticationTicket 的 AspNetCore 替代品
- python - pandas 中的 Loc 参数(包含和不包含)
- java - 如何使用打开的 csv 5.0 转换 OffsetDateTime
- java - 为 Java 设置 Sublime Text 并获得“bash: javac: command not found”
- python-pptx - python pptx表格单元格填充和边框颜色