【问题标题】:JavaScript - checking for any lowercase letters in a stringJavaScript - 检查字符串中的任何小写字母
【发布时间】:2011-02-19 07:47:00
【问题描述】:

考虑一个需要检查给定字符串是否全部为大写字母的 JavaScript 方法。输入字符串是人名。

当前的算法是检查任何小写字母。

var check1 = "Jack Spratt";    
var check2 = "BARBARA FOO-BAR"; 
var check3 = "JASON D'WIDGET";  

var isUpper1 = HasLowercaseCharacters(check1);  
var isUpper2 = HasLowercaseCharacters(check2);
var isUpper3 = HasLowercaseCharacters(check3);

function HasLowercaseCharacters(string input)
{
    //pattern for finding whether any lowercase alpha characters exist
    var allLowercase; 

    return allLowercase.test(input);
}

正则表达式是最好的方法吗?

你会使用什么模式来确定一个字符串是否有任何小写字母字符?

【问题讨论】:

  • 只是 a-z。例如不是 à 或 à?
  • 标题说“任意小写”,引言说“全部大写”。那不一样。决定一个,然后调整函数和变量名称。

标签: javascript regex


【解决方案1】:

function hasLowerCase(str) {
    return str.toUpperCase() != str;
}

console.log("HeLLO: ", hasLowerCase("HeLLO"));
console.log("HELLO: ", hasLowerCase("HELLO"));

【讨论】:

  • 这确实应该是公认的答案。非常聪明的先生。
  • 该死!那确实很聪明。非常感谢。
  • 如果字符串全是数字或非字母会失败
  • @DipenduPaul 不,该功能不会失败。它将返回false,这是正确的,因为全数字字符串没有任何小写字符。
  • 为什么是!= 而不是类型安全的!==
【解决方案2】:

还有:

function hasLowerCase(str) {
    return (/[a-z]/.test(str));
}

【讨论】:

  • 这是一个非常以英语为中心的小写字母观点。 “à”不是小写吗?我在这个答案被接受很久之后才提到这个,因为这个问题已被this newer question 引用。下面的!= toUpperCase 答案更具包容性。
  • 这不适用于小写,您还需要检查undefined。 ` function hasLowerCase(str) { return str ? (/[a-z]/.test(str)) :假; }`
  • 不适用于带有变音符号的字符。使用/\p{Ll}/u.test(value)的脚。
  • 如果你想找出字符串上的 2 个小写字符怎么办?
【解决方案3】:
function hasLowerCase(str) {
    return str.toUpperCase() != str;
}

function hasLowerCase(str) {
    for(x=0;x<str.length;x++)
        if(str.charAt(x) >= 'a' && str.charAt(x) <= 'z')
            return true;
    return false;
}

【讨论】:

  • 第二个适用于任何没有变音符号或特殊字符的语言,这就是首选第一个的原因。
【解决方案4】:

另一种解决方案只匹配正则表达式到 a-z

function nameHere(str) {
    return str.match(/[a-z]/);
}

 function nameHere(str) {
        return /[a-z]/g.test(str);
    }

【讨论】:

  • 欢迎来到 StackOverflow。在 StackOverflow,您应该在发布自己的答案之前阅读其他所有人的答案。您的两个解决方案都有效,但它们几乎是本页顶部 Ariel 答案的字词重复。虽然您可能自己想出了解决方案,但如果其他人已经打败了您,您永远不应该发布您的解决方案答案。附言真的没有任何“或”。您的两个解决方案在所有情况下都具有相同的功能,除了前一个解决方案更好,因为它占用的字符少(在缩小的文件中)。
  • 这个答案可以通过讨论.test.match 之间的区别以及何时使用它们来改进,或者至少参考一个答案,比如这个:stackoverflow.com/questions/10940137/…
猜你喜欢
  • 1970-01-01
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 2011-06-16
相关资源
最近更新 更多