3

一連の単語が与えられたら、単語の最初の文字をキーにしたハッシュにそれらを配置する必要があります。単語 = {} があり、キー A..Z と数字と記号の 0 があります。私は何かをしていた

var firstLetter = name.charAt(0);
    firstLetter = firstLetter.toUpperCase();

if (firstLetter < "A" || firstLetter > "Z") {
    firstLetter = "0";
}
if (words[firstLetter] === undefined) {
    words[firstLetter] = [];
} 
words[firstLetter].push(name);

しかし、これはÄrzteversorgungという単語のように、分音符やその他の文字では失敗します。その単語は「0」配列に入れられますが、どうすれば「A」配列に入れることができますか?

4

5 に答える 5

15

これを使用して、文字が文字である可能性があるかどうかをテストできます。

var firstLetter = name.charAt(0).toUpperCase();
if( firstLetter.toLowerCase() != firstLetter) {
    // it's a letter
}
else {
    // it's a symbol
}

これが機能するのは、JavaScript が小文字から大文字 (およびその逆) へのマッピングを既に持っているためですtoLowerCase()

于 2012-05-22T18:42:42.230 に答える
4

正規表現を使用できます。残念ながら、JavaScriptは国際文字を「単語文字」とは見なしません。ただし、以下の正規表現を使用して実行できます。

var firstLetter = name.charAt(0);
firstLetter = firstLetter.toUpperCase();
if (!firstLetter.match(/^\wÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜäëïöüçÇߨøÅ寿ÞþÐð$/)) {
    firstLetter = "0";
}
if (words[firstLetter] === undefined) {
    words[firstLetter] = [];
} 
words[firstLetter].push(name);
于 2012-05-22T18:45:54.553 に答える
2

を使用.charCodeAt(0);して ASCII チャート内の位置を取得し、いくつかのチェックを行うことができます。

探している範囲は、おそらく 65 ~ 90、97 ~ 122、128 ~ 154、160 ~ 165 (両端を含む) ですが、ASCII チャートを表示してこれを再確認してください。

このようなもの

if((x>64&&x<91)||(x>96&&x<123)||(x>127&&x<155)||(x>159&&x<166))

xCharコードはどこですか

于 2012-05-22T18:44:29.550 に答える