我想在PHP中使用正则表达式来检查字符串的所有大写。
如果给定的字符串包含所有大写字母而不管数字和其他字符,那么它应该匹配它们。
答案 0 :(得分:3)
由于您也想匹配其他字符,请查找小写字母而不是大写字母。如果找到,则返回false。 (或使用负字符类的tdammers' suggestion。)
return !preg_match('/[a-z]/', $str);
您也可以跳过正则表达式,只需将strtoupper($str)
与原始字符串进行比较,这样就可以保留数字和符号:
return strtoupper($str) == $str;
两者都不考虑多字节字符串;为此,您可以尝试向正则表达式添加u
修饰符并分别使用mb_strtoupper()
(我还没有测试过 - 有更多经验丰富的Unicode验证吗?)。
答案 1 :(得分:3)
if (preg_match('/^[^\p{Ll}]*$/u', $subject)) {
# String doesn't contain any lowercase characters
} else {
# String contains at least one lowercase characters
}
\p{Ll}
匹配Unicode小写字母;因此,[^\p{Ll}]
匹配任何非小写字母的字符。
答案 2 :(得分:1)
这样的事情可能是:
'/^[^a-z]*$/'
诀窍是使用独占字符类:这个字符匹配所有不是小写字母的字符。请注意,不会检查带重音的字母。