检测是否一个字符是字母(Detecting if a character is a letter)

2019-06-24 16:10发布

给定一组的话,我需要把他们在上键入单词的第一个字母的哈希值。 我有字= {},同键的数字和符号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”阵列中?

Answer 1:

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


Answer 2:

您可以使用此测试一个字符可能是字母:

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

这工作,因为JavaScript已经为小写为大写字母(反之亦然)的映射,所以如果一个字符是不变的toLowerCase()则它不会在信表。



Answer 3:

尝试转换字符到其大写和小写和检查,看看是否有区别。 当它们被转换到它们各自的大写和小写字母,只有改变字符(数字,标点符号等别)。 下面是一个使用铭记这一概念的示例函数:

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


Answer 4:

您可以使用.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是字符代码



文章来源: Detecting if a character is a letter