拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 JS中如何判断一个字符串是否同时包含小写和大写字母?

JS中如何判断一个字符串是否同时包含小写和大写字母?

白鹭 - 2022-02-16 1972 0 0

我想撰写一个函式来检查字符串是否包含小写大写字母。如果两者都存在,它应该回传真,如果缺少一个,它应该回传假。

function lowercaseUppercase (letterCase) {
  
  if (letterCase == letterCase.toUpperCase()) 
  {
  return true; 
} else {
  return false; 
};  
}

console.log(lowercaseUppercase("GGG"))

true如果我使用大写字母,并且false我将小写字母传递给这个函式这将回传如果我取代letterCase.toUpperCase()letterCase.toLowerCase()它的作业原理。我希望函式检查两个自变量是否为真。

我可以使用&&运算子来检查两者吗?

function lowercaseUppercase (letterCase) {
  
  if (letterCase == letterCase.toUpperCase() &&
      letterCase == letterCase.toLowerCase()) 
  {
  return true; 
} else {
  return false; 
};  
}

这不起作用,并为大写、小写和两者的组合回传 false。

如果两者都存在,它希望它回传 true,如果缺少任何一个,它应该回传 false。

谁能指出我哪里出错了?:)

uj5u.com热心网友回复:

您可以使用正则表达式进行检查,true如果两种情况都是true.

方法:

  • RegExp#test
  • 逻辑与 &&

function allCases(string) {
    const
        upper = /[A-Z]/.test(string),
        lower = /[a-z]/.test(string);

    return upper && lower;
}

console.log(allCases('abc'));
console.log(allCases('ABC'));
console.log(allCases('abC'));
console.log(allCases('123'));

通过迭代字符串的不同方法。

function allCases(string) {
    let upper = false,
        lower = false;

    for (const character of string) {
        if (character.toUpperCase() === character.toLowerCase()) continue;
        upper ||= character === character.toUpperCase();
        lower ||= character === character.toLowerCase();
        if (upper && lower) return true;
    }

    return false;
}

console.log(allCases('abc'));
console.log(allCases('ABC'));
console.log(allCases('abC'));
console.log(allCases('123'));

uj5u.com热心网友回复:

你在做什么只是将字符串转换为大写和小写。这是一个单衬解决方案。

const verifyString = (str)=> (/[a-z]/.test(str)) && (/[A-Z]/.test(str))

uj5u.com热心网友回复:

toUpperCasetoLowerCase一次对整个字符串函式操作。

如果你在 js 终端上试试这个,你会看到:

"Hello World!".toUpperCase() === "HELLO WORLD!"

根据您的问题,我认为您想要的是逐个字符地检查。

您可以使用Array.from将字符串转换为阵列,然后使用以下Array.some方法检查任何字符是否满足给定条件

const input = "Hello World!";
const containsUpperCase = Array.from(input).some((c) => c === c.toUpperCase());

参考:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

(编辑)我意识到箭头函式语法可能对初学者不太友好,所以这里有一个替代方案:

function charIsUppercase(c) {
    return c === c.toUpperCase();
}

const input = "Hello World!";
const containsUpperCase = Array.from(input).some(charIsUppercase);

uj5u.com热心网友回复:

letterCase == letterCase.toUpperCase()实际上并不检查字符串中是否有大写字母,而是检查字符串中是否没有小写字母因此,您的&&表达式会检查字符串中是否没有小写或大写字母。

所以为了检查有小写和大写字母,你需要做

function lowercaseUppercase (letterCase) {
  return !(letterCase == letterCase.toUpperCase() || letterCase == letterCase.toLowerCase());  
}

或者

function lowercaseUppercase (letterCase) {
  return letterCase != letterCase.toUpperCase()  // has lowercase letters
      && letterCase != letterCase.toLowerCase(); // has uppercase letters
}
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *