JavaScript:比较字符和重音字符
JavaScript: Comparing characters and accented characters
我正在创建一个类似绞刑架的简单游戏。用户可以输入一个"secret sentence",然后玩家必须通过一个一个地选择字母来猜测它。
由于这个游戏将使用多种语言,如果玩家选择非重音字符,我想解决所有重音字符。例如:
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.prototype.localeCompare()
,sensitivity
值为 "base"。这有不区分大小写比较的额外好处(我想你也会想要的)。
如果您的字符匹配,localeCompare()
returns 0
。
这是一个假设您想要找到匹配角色位置的示例(即 "hang man" 游戏)
const locale = undefined // set this if it matters, otherwise use default
const options = { sensitivity: 'base' }
const findCharPositions = (str, char) =>
Array.prototype.reduce.call(str, (indexes, c, i) =>
(c.localeCompare(char, locale, options) || indexes.push(i), indexes), [])
const str = 'IL CANE È BELLO'
console.log('Find "l":', findCharPositions(str, 'l'))
console.log('Find "e":', findCharPositions(str, 'e'))
您可以使用 String#normalize
将重音字符与正常字符进行比较。
要执行比较,您需要首先 get/extract 正常字符与重音字符,如下所示。
string.normalize('NFD')
这将 return 一个包含两项的数组。您现在可以将数组中的第一项与普通字符进行比较。
function isAccented(char, accentedChar) {
return char === accentedChar.normalize('NFD')[0];
}
console.log(isAccented('E', 'È'));
我正在创建一个类似绞刑架的简单游戏。用户可以输入一个"secret sentence",然后玩家必须通过一个一个地选择字母来猜测它。
由于这个游戏将使用多种语言,如果玩家选择非重音字符,我想解决所有重音字符。例如:
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.prototype.localeCompare()
,sensitivity
值为 "base"。这有不区分大小写比较的额外好处(我想你也会想要的)。
如果您的字符匹配,localeCompare()
returns 0
。
这是一个假设您想要找到匹配角色位置的示例(即 "hang man" 游戏)
const locale = undefined // set this if it matters, otherwise use default
const options = { sensitivity: 'base' }
const findCharPositions = (str, char) =>
Array.prototype.reduce.call(str, (indexes, c, i) =>
(c.localeCompare(char, locale, options) || indexes.push(i), indexes), [])
const str = 'IL CANE È BELLO'
console.log('Find "l":', findCharPositions(str, 'l'))
console.log('Find "e":', findCharPositions(str, 'e'))
您可以使用 String#normalize
将重音字符与正常字符进行比较。
要执行比较,您需要首先 get/extract 正常字符与重音字符,如下所示。
string.normalize('NFD')
这将 return 一个包含两项的数组。您现在可以将数组中的第一项与普通字符进行比较。
function isAccented(char, accentedChar) {
return char === accentedChar.normalize('NFD')[0];
}
console.log(isAccented('E', 'È'));