检测角色是否是一个字母

cda*_*win 3 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);
Run Code Online (Sandbox Code Playgroud)

但这种情况因为迪斯特里斯和其他字符而失败,就像Ärzteversorgung这个词一样.那个词放在"0"数组中,我怎么能把它放在"A"数组中呢?

Nie*_*sol 15

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

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

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

  • 它仅适用于两院制脚本中的字符,即编写大写/小写区分的系统; 大多数剧本没有(例如,希伯来语,梵文,中文). (3认同)
  • @vsync,问题提到样本词"Ärzteversorgung".这不是英语.通常,如果人们只想到英语,他们甚至不会问这个问题 - 他们只是假设`[A-Za-z]`涵盖所有字母. (2认同)

小智 5

尝试将字符转换为大写和小写,并检查是否存在差异。只有字母字符在转换为各自的大写和小写时才会改变(数字、标点符号等不会)。以下是使用此概念的示例函数:

function isALetter(charVal)
{
    if( charVal.toUpperCase() != charVal.toLowerCase() )
       return true;
    else
       return false;
}
Run Code Online (Sandbox Code Playgroud)


jnr*_*bsn 4

您可以使用正则表达式。不幸的是,JavaScript 并不将国际字符视为“单词字符”。但您可以使用下面的正则表达式来做到这一点:

\n\n
var firstLetter = name.charAt(0);\nfirstLetter = firstLetter.toUpperCase();\nif (!firstLetter.match(/^\\w\xc3\x80\xc3\x88\xc3\x8c\xc3\x92\xc3\x99\xc3\xa0\xc3\xa8\xc3\xac\xc3\xb2\xc3\xb9\xc3\x81\xc3\x89\xc3\x8d\xc3\x93\xc3\x9a\xc3\x9d\xc3\xa1\xc3\xa9\xc3\xad\xc3\xb3\xc3\xba\xc3\xbd\xc3\x82\xc3\x8a\xc3\x8e\xc3\x94\xc3\x9b\xc3\xa2\xc3\xaa\xc3\xae\xc3\xb4\xc3\xbb\xc3\x83\xc3\x91\xc3\x95\xc3\xa3\xc3\xb1\xc3\xb5\xc3\x84\xc3\x8b\xc3\x8f\xc3\x96\xc3\x9c\xc3\xa4\xc3\xab\xc3\xaf\xc3\xb6\xc3\xbc\xc3\xa7\xc3\x87\xc3\x9f\xc3\x98\xc3\xb8\xc3\x85\xc3\xa5\xc3\x86\xc3\xa6\xc3\x9e\xc3\xbe\xc3\x90\xc3\xb0$/)) {\n    firstLetter = "0";\n}\nif (words[firstLetter] === undefined) {\n    words[firstLetter] = [];\n} \nwords[firstLetter].push(name);\n
Run Code Online (Sandbox Code Playgroud)\n