检测字符是否为字母

Detecting if a character is a letter

本文关键字:是否 字符 检测      更新时间:2023-09-26

给定一组单词,我需要将它们放在单词的第一个字母上键入的哈希中。我有单词 = {},键 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"数组中?

您可以使用它来测试字符是否可能是字母:

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

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

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

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

您可以使用正则表达式。不幸的是,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);
您可以使用

.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))

其中x是字符代码

幸运的是,

现在无需外部库即可实现。直接来自文档:

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);