【问题标题】:How do I check if a string contains both lowercase and uppercase letters in JS?如何在JS中检查字符串是否同时包含小写和大写字母?
【发布时间】:2021-12-28 16:39:39
【问题描述】:

我想编写一个函数来检查字符串是否包含小写大写字母。如果两者都存在,则应返回 true,如果缺少任何一个,则应返回 false。

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。

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

【问题讨论】:

  • 如果我理解正确,您需要一个仅在输入混合大小写时才返回 true 的函数(即,如果完全小写或完全大写,则返回 false)。在这种情况下,您可以将 AND 运算符替换为 OR 运算符,并交换您的 return 语句。
  • 这正是我所追求的。谢谢!

标签: javascript function if-statement uppercase lowercase


【解决方案1】:

如果两种情况都是true,您可以使用正则表达式检查并返回true

方法:

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'));

【讨论】:

  • regex 可能不是@OP 知道的东西
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    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);
    

    【讨论】:

      【解决方案4】:

      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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-06
        • 2017-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-06
        • 2018-02-03
        相关资源
        最近更新 更多