2010-03-08 60 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,你就知道它全是大寫字母。

相關問題