2010-03-08 93 views

回答

21

您可以使用strtoupper将字符串转换为大写。你现在知道它是大写的,你可以检查原始字符串是否与它匹配。

即。

$str === strtoupper($str) 
4
if(strcmp(strtoupper($str), $str) === 0) { 
    echo 'is uppercase'; 
} 

使用mb_strtoupper如有特殊字符编码参与。

使用strcmp进行二进制安全字符串比较。

11

你可以尝试制作字符串的副本,该副本转换为大写,并将其与原始字符串:

public function isUpperCase ($string) { 
    return $string === strtoupper($str); 
} 

OR,一个更好的版本(这是多字节安全*)将是:

public function mb_isUpperCase ($string) { 
    $upper = mb_convert_case( 
     $string, 
     MB_CASE_UPPER, 
     mb_detect_encoding( 
     $string 
    ) 
    ); 
    return $string === $upper; 
} 

*请注意,mb_detect_encoding可能会失败,并返回false。在生产环境中,您应该向mb_detect_encoding提供可能的编码列表,或处理mb_detect_encoding失败的情况。

+0

我只有多字节版本的问题是编码检测,这是一个非常困难的事情要做,并且如果它错误的话会破坏你的字符串。 +1的唯一真正的方式来做到这一点。 – 2010-03-08 21:33:37

+0

同意。为这种情况增加了一点评论 – PatrikAkerstrand 2010-03-08 21:37:45

3

如果所有字符都是字母,并且它是ASCII字符串,则ctype_upper()可能是可能的。

0

如果它是一个很长的字符串,并且您不想制作副本,那么请走过字符串并查看每个字符的ascii值。如果它小于97,你就知道它全是大写字母。

相关问题