为什么这些字符被认为是大写的

Why are these characters considered to be upper case?

本文关键字:认为是 字符 为什么      更新时间:2023-09-26

我正在尝试测试密码。我需要对字符串进行一些测试。我发现当我使用 toUpperCase() 测试它们时,我的特殊字符的计算结果为 true。我怀疑他们会评估为错误。

我应该如何测试特殊字符?

// CREATE ARRAY OF CHARACTERS
CharacterArray = ["1","2","3","a","b","c","D","E","F","/","+",")"];
// TEST CHARACTERS 
function testCharacters() {
    // GET ARRAY LEN
    var CharacterArrayLen = CharacterArray.length;
    // LOOP THROUGH ARRAY
    for (i = 0; i < CharacterArrayLen; i++) {
        // PARSE SINGLE CHARACTER
        var ThisChar = CharacterArray[i];
        if (!isNaN(ThisChar)) {
            alert(ThisChar + ' is numeric!');
        } else {
            if (ThisChar === ThisChar.toUpperCase()) {
                alert(ThisChar + ' is upper case');
            } else if (ThisChar === ThisChar.toLowerCase()) {
                alert(ThisChar + " is lower case");
            }
        }   
    }
}
testCharacters();

它们不是大写或小写。toUpperCasetoLowerCase为这些字符返回相同的内容。如果您先测试小写,您会发现它们都是小写的!

您可以使用一些正则表达式来查看字符是否在字母表中。

ThisChar.match(/^[a-zA-Z]$/)

将返回非字母字符的null

如果您只是想查看这些字符中的每一个是否都在数组中,则可以使用indexOf

CharacterArray.indexOf('a')
> 3
CharacterArray.indexOf('A')
> -1

第二个返回-1 A因为不在数组中。

这是一个使用正则表达式的演示

特殊字符是无大小写的(既不是小写也不是大写),无论是凭直觉还是 Unicode 标准。但是 JavaScript 的定义是,对于不大小写的字符,toUpperCase()toLowerCase() 方法返回字符本身。

即使从编辑的问题中也看不出您到底想测试什么。但是如果你需要测试一个字符是大写字母还是小写字母,那么 JavaScript 中合适的基本逻辑是这样的:如果ThisChar !== ThisChar.toUpperCase(),那么ThisChar是小写字母;如果 ThisChar !== ThisChar.LowerCase() , then ThisChar' 是一个大写字母;否则,它是无大小写的——要么是特殊字符,要么是书写系统中不区分大小写的字母。

对于某些字符,例如尖锐的 s "ß",它在 Unicode 中没有大写映射(因为大写等价物是两个字母"SS",这必须单独处理)。因此,如果它们相关,您需要将它们作为特殊情况处理。

在其他编程语言中,你可以简单地使用字符的 General Category 属性,但 JavaScript 目前无法访问它。您可以从 Unicode 字符数据库下载相关文件,可能对其进行预处理以删除不必要的信息,并使您的程序检查 General Category 属性,但这会有些尴尬,并且每当 Unicode 标准更改时都需要更新。

这是预期的行为。如果你删除"其他",所以

if (ThisChar === ThisChar.toUpperCase()) {
    alert(ThisChar + ' is upper case');
} else if (ThisChar === ThisChar.toLowerCase()) {
    alert(ThisChar + " is lower case");
}

成为

if (ThisChar === ThisChar.toUpperCase()) {
    alert(ThisChar + ' is upper case');
} if (ThisChar === ThisChar.toLowerCase()) {
    alert(ThisChar + " is lower case");
}

您将看到"/"、"+"和"("被视为大写和小写。

当您考虑确定字符串是否全部属于特定情况的函数时,这是有意义的。说"abcde%"不全是小写,或者"ABCDE%"不全是大写真的有意义吗?要使这两种情况都起作用,非字母字符被定义为大写和小写。

为什么不使用正则表达式?

function testCharacters(string) {
    var exp = /^[a-z]+$/ig;
    return exp.test(string);
}

请注意,使用正则表达式,您可以一次测试整个字符串,而不必迭代每个字符。