JavaScript - 检查字符串中是否有任何小写字母

65
考虑一个JavaScript方法,需要检查给定的字符串是否全为大写字母。输入的字符串是人名。
当前算法是检查是否存在任何小写字母。

考虑一种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。不包括例如 à 或 à? - Martin Smith
标题说“任何小写字母”,而介绍说“全部大写”。这不一样。决定一个,然后调整函数和变量名称。 - Roland Illig
4个回答

168

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

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


6
这真的应该成为被采纳的答案。非常聪明,先生。 - perry
1
该死!这确实非常聪明。非常感谢。 - WilomGfx
8
如果字符串全是数字或非字母字符,它将会失败。 - Dipendu Paul
9
不会失败,它会返回"false",这是正确的,因为全是数字的字符串没有任何小写字母。 - Roland Illig
6
为什么要使用!=而不是类型安全的!== - Roland Illig
显示剩余3条评论

69

还有:

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

38
这是一个非常以英语为中心的观点,认为小写字母只有英文字母。那么 "à" 不算小写字母吗?我之所以在这么长时间之后提到这个问题,是因为这个问题被 这个新问题 引用了。下面的 != toUpperCase 答案更具包容性。 - T.J. Crowder
2
这对于小写字母不起作用,你需要同时检查undefined function hasLowerCase(str) { return str ? (/[a-z]/.test(str)) : false; } - parsh
不适用于带有变音符号的字符。对此,请使用 /\p{Ll}/u.test(value) - Martin Ždila
如果您想在字符串中查找2个小写字符,该怎么办? - Pxaml

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

1
第一个选择更好,因为第二个只适用于不包含变音符号或特殊字符的语言。 - WilomGfx

1
另一种解决方案只匹配a至z的正则表达式。
function nameHere(str) {
    return str.match(/[a-z]/);
}

or

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

4
欢迎来到StackOverflow。在StackOverflow,我们希望你在发表你自己的答案之前先阅读其他人的回答。虽然你提供的两个解决方案都是有效的,但它们几乎是和本页面顶部的Ariel的答案一模一样。即使你是独立想出这些解决方案的,如果别人已经先于你发布了相同的答案,你也不应该再次提交。此外,需要说明的是,实际上并没有什么“或者”的区别。在所有情况下,你提供的这两个解决方案都能正常工作,除了前一个解决方案在压缩文件时可以少占用一个字符的优点外。 - Jack G
这个答案可以通过讨论.test.match之间的区别以及何时使用每个函数来改进,或者至少引用一个已经讨论过这个问题的答案,比如这个:https://dev59.com/v2gu5IYBdhLWcg3w9ryX#10940138 - phoenixdown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接