48

姓のリストを英数字のユーザー名に変換する必要がありますが、残念ながらそれらの一部には非 ASCII 文字が含まれています。

Hernández
Quermançós 
Migueláñez

1 つの方法は、正規表現を使用して、a.replace(/[^a-z0-9]/gi,''). ただし、(少なくともユーザーにとって)より直感的な解決策は、アクセント付きの文字を「プレーンな」同等のものに置き換えることです。たとえば、 turn ááinto açintocなどです。JavaScript でこれを行う簡単な方法はありますか?

4

3 に答える 3

51

これらの文字は、Unicode テーブル内の「プレーンな同等物」と数学的な関係がないため、次のようなものを使用して手動で置き換える必要があります。

function cleanUpSpecialChars(str)
{
    return str
        .replace(/[ÀÁÂÃÄÅ]/g,"A")
        .replace(/[àáâãäå]/g,"a")
        .replace(/[ÈÉÊË]/g,"E")
        //.... all the rest
        .replace(/[^a-z0-9]/gi,''); // final clean up
}

大文字と小文字を区別しないオプションはこれらの文字では機能しないため、それらの小文字と大文字のバリアントに対して行う必要があります。

于 2013-08-08T10:28:05.167 に答える
19

次のような辞書があるとします。

var dict = {"á":"a", "á":"a", "ç":"c"}

次に、次のような機能を実行します。

a.replace(/[^\w ]/g, function(char) {
  return dict[char] || char;
});
于 2013-08-08T10:37:05.120 に答える