簡體   English   中英

JavaScript:比較字符和重音字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM