如何使用JavaScript测试字符串中的字母是大写还是小写?

Joe*_*Joe 273 javascript

如何使用JavaScript测试字符串中的字母是大写还是小写?

小智 302

如果字符或整个字符串是数字,josh和maleki的答案将在大写和小写都返回true.使结果成为错误的结果.使用josh的例子

var character = '5';
if (character == character.toUpperCase()) {
 alert ('upper case true');
}
if (character == character.toLowerCase()){
 alert ('lower case true');
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是首先测试它是否为数字,否则测试它是否为大写或小写示例

var strings = 'this iS a TeSt 523 Now!';
var i=0;
var character='';
while (i <= strings.length){
    character = strings.charAt(i);
    if (!isNaN(character * 1)){
        alert('character is numeric');
    }else{
        if (character == character.toUpperCase()) {
            alert ('upper case true');
        }
        if (character == character.toLowerCase()){
            alert ('lower case true');
        }
    }
    i++;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果角色既不是数字也不是alpha,例如标点符号,你会不会有同样的错误结果? (15认同)
  • @LarsH看到这个:http://stackoverflow.com/questions/1027224/how-can-i-test-if-a-letter-in-a-string-is-uppercase-or-lowercase-using-javascrip/9728437 #回答-9728437 (4认同)
  • 这是一个很老的问题,但是随机的“ ch”变量又是怎么回事? (2认同)
  • @JS这是一个错字,意为`var character =';` (2认同)

Dan*_*uis 56

if (character == character.toLowerCase())
{
  // The character is lowercase
}
else
{
  // The character is uppercase
}
Run Code Online (Sandbox Code Playgroud)


cie*_*bor 42

如果字符是大写字母,则将记录true,并在每个其他情况下记录false:

var letters = ['a', 'b', 'c', 'A', 'B', 'C', '(', ')', '+', '-', '~', '*'];

???for (var ?i = 0; i<letters.length; i++) {
    if (letters[i] === letters[i].toUpperCase()
        && letters[i] !== letters[i].toLowerCase()) {
        console.log(letters[i] + ": " + true);
    } else {
        console.log(letters[i] + ": " + false);
    }
}?
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试一下:http://jsfiddle.net/Axfxz/(使用Firebug或者......).

???for (var ?i = 0; i<letters.length; i++) {
    if (letters[i] !== letters[i].toUpperCase()
        && letters[i] === letters[i].toLowerCase()) {
        console.log(letters[i] + ": " + true);
    } else {
        console.log(letters[i] + ": " + false);
    }
}?
Run Code Online (Sandbox Code Playgroud)

这是小写:).

  • 不幸的是,有些小写字母没有大写字母(也可能是相反)。德语中的“ß”是小写字母,但是如果在其上应用第二个功能,则将导致错误。 (3认同)
  • 好的,试试这个:`შეარჩიე კატეგორიების მიხედვით` (3认同)

Web*_*001 36

其他答案的问题是,当检查小写/大写时,某些字符(如数字或标点符号)也会返回true.

我发现这对它非常有效:

function isLowerCase(str)
{
    return str == str.toLowerCase() && str != str.toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)

这适用于标点符号,数字和字母:

assert(isLowerCase("a"))
assert(!isLowerCase("Ü"))
assert(!isLowerCase("4"))
assert(!isLowerCase("_"))
Run Code Online (Sandbox Code Playgroud)

要检查一个字母,只需使用即可 isLowerCase(str[charIndex])

  • 不知道为什么其他答案被投票.这是我能想到的唯一解决方案 - 逻辑是"角色是否具有上部&小写变体?如果是,那么返回它是大写还是小写" (4认同)
  • @GaurangTandon是的,回答2年后我也注意到了,但我之前没有注意到因为它被包裹在for循环中,将某些东西记录到控制台,而且通常不是可重复使用的代码片段所以我和(基于对此的投票)回答)很多其他人自然只是跳过了答案.因此,我认为将此作为快速复制粘贴答案而不是其他答案是很好的. (3认同)

Koo*_*Inc 20

您可以使用正则表达式测试和toUpperCase方法:

String.prototype.charAtIsUpper = function (atpos){
      var chr = this.charAt(atpos);
      return /[A-Z]|[\u0080-\u024F]/.test(chr) && chr === chr.toUpperCase();
};
// usage (note: character position is zero based)
'hi There'.charAtIsUpper(3);      //=> true
'BLUE CURAÇAO'.charAtIsUpper(9);  //=> true
'Hello, World!'.charAtIsUpper(5); //=> false
Run Code Online (Sandbox Code Playgroud)

也可以看看

  • @LarsH:我更改了(并简化了)原型方法。现在包括变音符号 (2认同)
  • @Flame_Phoenix范围\ u0080-u024F可能包含小写变音符,因此测试还应该检查字符本身。 (2认同)

Abd*_*UMI 19

const isUpperCase = (string) => /^[A-Z]*$/.test(string)
Run Code Online (Sandbox Code Playgroud)

然后 :

isUpperCase('A') // true
isUpperCase('a') // false
Run Code Online (Sandbox Code Playgroud)

  • 不适用于重音字符 (á, Á)、元音突变 (öÖ, ää, üÜ) 和字素 (ß,ẞ)。 (8认同)
  • 到目前为止,最快的答案是不分配任何内存或转换数据。 (3认同)
  • @latitov你是什么意思?这是纯 JavaScript。 (3认同)

Jos*_*osh 16

function isUpperCase(myString) { 
  return (myString == myString.toUpperCase()); 
} 
function isLowerCase(myString) { 
  return (myString == myString.toLowerCase()); 
} 
Run Code Online (Sandbox Code Playgroud)

  • @zaczap - 不正确.这些将转换(然后测试)整个字符串. (3认同)
  • +1评论 - 对于原始问题,这个答案稍微偏离了,问题是字符串中的字母(不是整个字符串) (3认同)
  • 让我们不要忘记严格的相等性检查!=== FTW! (2认同)

Jen*_*ens 11

使用现代浏览器,您可以使用 regexp 和 unicode 属性测试,例如

\n
/\\p{Lu}/u.test("A") // is true\n/\\p{Lu}/u.test("\xc3\x85") // is true\n/\\p{Lu}/u.test("a1\xc3\xa5") // is false\n
Run Code Online (Sandbox Code Playgroud)\n

更多信息请点击这里:

\n\n

此处的一般类别列表:

\n\n


mal*_*eki 10

更具体地说是被问到的问题.传入一个字符串和一个要检查的位置.非常接近Josh的,除了这个将比较一个更大的字符串.本来可以添加评论,但我还没有这种能力.

function isUpperCase(myString, pos) { 
    return (myString.charAt(pos) == myString.charAt(pos).toUpperCase()); 
}   

function isLowerCase(myString, pos) {
    return (myString.charAt(pos) == myString.charAt(pos).toLowerCase()); 
}
Run Code Online (Sandbox Code Playgroud)


Nat*_*Nat 8

您还可以使用正则表达式显式检测大写罗马字母字符.

isUpperCase = function(char) {
  return !!/[A-Z]/.exec(char[0]);
};
Run Code Online (Sandbox Code Playgroud)

编辑:上述函数对于ASCII/Basic拉丁语Unicode是正确的,这可能就是你所关心的.以下版本还支持Latin-1 Supplement和Greek和Coptic Unicode块...如果您出于某种原因需要它.

isUpperCase = function(char) {
  return !!/[A-ZÀ-ÖØ-Þ??-??-?????????????-?]/.exec(char[0]);
};
Run Code Online (Sandbox Code Playgroud)

如果你需要进一步的支持(Ѭ大写?),这个策略开始下降,因为有些块混合了大写和小写字符.

  • 这是本页面的最佳答案!其他一切都是胡说八道. (2认同)

小智 7

我相信这是最简单的解决方案..您可以在输入字段中使用 onchange 处理程序..进行验证

const isValid = e.target.value === e.target.value.toLowerCase()

if (isValid) {
  //Do something
} else {
  //Do something
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*mes 5

有一个非常简单的答案,没有人提到:

function isLowerCase(str) {
    return str !== str.toUpperCase();
}
Run Code Online (Sandbox Code Playgroud)

如果str.toUpperCase()不返回相同str,则必须为小写。要测试大写,请将其更改为str !== str.toLowererCase()

与其他答案不同,它可以在非字母字符(返回false)上正常工作,并且可以在其他字母,重音符号等上工作。


Art*_*ker 5

function isCapital(ch){
    return ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90;
}
Run Code Online (Sandbox Code Playgroud)

  • 或者只是“return (ch.charCodeAt() &gt;= 65 &amp;&amp; ch.charCodeAt() &lt;= 90)”。 (2认同)

Ste*_*son 5

这个问题的一个很好的答案应该是简洁,正确处理unicode并处理空字符串和null。

function isUpperCase(c) {
    return !!c && c != c.toLocaleLowerCase();
}
Run Code Online (Sandbox Code Playgroud)

此方法首先处理空字符串,然后处理null,然后确保将给定字符串转换为小写会更改其相等性。这样可以确保该字符串根据当前本地的大写规则包含至少一个大写字母(并且不会对数字和其他没有大写字母的字形返回假肯定)。

最初的问题专门询问有关测试第一个字符的问题。为了使您的代码简单明了,我将第一个字符从字符串中分离出来,而不是测试它是否为大写。


Gib*_*olt 5

这是使用简单正则表达式的简单易读的解决方案。

// Get specific char in string
const char = string.charAt(index);

const isLowerCaseLetter = (/[a-z]/.test(char));
const isUpperCaseLetter = (/[A-Z]/.test(char));
Run Code Online (Sandbox Code Playgroud)