检测角色是否是一个字母

时间:2012-05-22 18:34:26

标签: javascript utf-8 character-encoding

给定一组单词,我需要将它们放在键入该单词首字母的哈希值中。 我有单词= {},键为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);

但这与dieresis和其他字符失败,例如Ärzteversorgung这个词。 那个词放在“0”数组中,我怎么能把它放在“A”数组中?

5 个答案:

答案 0 :(得分:15)

你可以用它来测试一个角色可能是一个字母:

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

这是因为JavaScript已经有一个小写字母到大写字母的映射(反之亦然),所以如果一个字符没有被toLowerCase()改变,那么它就不在字母表中。

答案 1 :(得分: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);

答案 2 :(得分:3)

尝试将字符转换为大写和小写,然后检查是否存在差异。只有字母字符在转换为各自的大写和小写字母时才会更改(数字,标点符号等等)。下面是一个使用这个概念的示例函数:

function isALetter(charVal)
{
    if( charVal.toUpperCase() != charVal.toLowerCase() )
       return true;
    else
       return false;
}

答案 3 :(得分:2)

您可以使用.charCodeAt(0);获取ASCII图表中的位置,然后进行一些检查。

您正在寻找的范围可能是65-90,97-122,128-154,160-165(含),但请仔细查看ASCII Chart

像这样的东西

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

x是Char Code

答案 4 :(得分:1)

幸运的是,现在无需外部库即可实现。直接来自the docs

let story = "It’s the Cheshire Cat: now I shall have somebody to talk to.";

// Most explicit form
story.match(/\p{General_Category=Letter}/gu);

// It is not mandatory to use the property name for General categories
story.match(/\p{Letter}/gu);