[英]JavaScript: Comparing characters and accented characters
我正在創建一個簡單的像游戲一樣的吊人。 用戶可以輸入一個“秘密句子”,然后玩家必須通過一個一個選擇的字母來猜測它。
由於此游戲將在多種語言中使用,如果玩家選擇非重音字符,我想解決所有重音字符。 例如:
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;
}
}
注意:密句和每個字符都是大寫的
您需要使用sensitivity
值為"base" 的String.prototype.localeCompare()
。 這具有不區分大小寫的比較的額外好處(我假設您也會想要)。
如果您的字符匹配,則localeCompare()
返回0
。
這是一個基於假設您要查找匹配字符的位置的示例(即“吊人”游戲)
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
將重音字符與其正常對應物進行比較。
要進行比較,您需要首先從重音字符中獲取/提取正常字符,如下所示。
string.normalize('NFD')
這將返回一個包含兩個項目的數組。 您現在可以將數組中的第一項與普通字符進行比較。
function isAccented(char, accentedChar) { return char === accentedChar.normalize('NFD')[0]; } console.log(isAccented('E', 'È'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.