给定一组的话,我需要把他们在上键入单词的第一个字母的哈希值。 我有字= {},同键的数字和符号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”阵列中?
你可以使用正则表达式。 不幸的是,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);
您可以使用此测试一个字符可能是字母:
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;
}
您可以使用.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
是字符代码