为什么这些字符被认为是大写的
Why are these characters considered to be upper case?
我正在尝试测试密码。我需要对字符串进行一些测试。我发现当我使用 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();
它们不是大写或小写。toUpperCase
和toLowerCase
为这些字符返回相同的内容。如果您先测试小写,您会发现它们都是小写的!
您可以使用一些正则表达式来查看字符是否在字母表中。
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);
}
请注意,使用正则表达式,您可以一次测试整个字符串,而不必迭代每个字符。
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- 为什么Angularjs服务返回的是字符数组而不是对象数组
- 为什么使用“new”创建一个Javascript数组被认为是不好的
- 为什么流星会被认为是不安全的
- 这些被认为是Javascript闭包吗
- Angular2 Javascript 验证 输入数字而不是字符
- 美元符号可以被认为是jquery中的宏吗?
- 我的javascript函数有问题,我认为是document.getElementById('vodObj
- 这个JS函数会被认为是递归的吗
- “var self=this”被认为是一种代码气味
- 为什么数字垫被认为是字符
- jQuery.ajax认为是什么响应;成功”;
- 为什么这些字符被认为是大写的
- 什么被认为是在节点模块中共享“全局”变量的好方法
- HTML 在服务器上运行时在 jQuery 中显示代码而不是字符
- JavaScript 认为是星期四和星期五
- 基于字节而不是字符计数的 Substr
- 防止图像保存到数据库而不是字符
- 如果 JS 包装器对象被认为是糟糕的风格,那么使用 lodash _.isString 等进行类型检查是否也被认为是糟糕