2010-05-11 77 views
29

我有UTF-8的文本也有變音字符,並且希望檢查本文的第一個字母是大寫還是小寫。這個怎麼做?如何在PHP中檢查字母是上限還是下限?

+0

@伊麗莎白巴克沃特爲什麼? – 2010-05-11 22:52:44

+0

你爲什麼要檢查一個字母是上限還是下限? – 2010-05-12 17:36:52

+0

@伊麗莎白Buckwalter因爲我從這個文本中找出其他文本,並且如果第一個字母比第二個字母更重要,那麼我應該這樣做。 – 2010-05-13 08:55:48

回答

39
function starts_with_upper($str) { 
    $chr = mb_substr ($str, 0, 1, "UTF-8"); 
    return mb_strtolower($chr, "UTF-8") != $chr; 
} 

注意mb_substr要正確隔離的第一個字符。

+1

謝謝你,你的回答是對的。您不能在UTF-8字符串上使用$ str [0]。 – 2010-05-11 22:53:44

+3

並不總是有效。有大寫字母的Unicode字符(即類別Lu),但沒有小寫映射。大多數情況下,數學大膽/斜體/雙擊字母。 – dan04 2010-05-13 06:25:52

+1

@ dan04這是一個很好的觀點。最重要的是,有標題案例(LT)。但是,mbstring擴展不會向用戶空間公開函數以測試這些屬性。這是一個遺憾,因爲該功能是存在的 - 見http://svn.php.net/viewvc/php/php-src/trunk/ext/mbstring/php_unicode.h?revision=296679&view=markup – Artefacto 2010-05-13 07:17:53

10

試過了嗎?

$str = 'the text to test'; 
if($str{0} === strtoupper($str{0})) { 
    echo 'yepp, its uppercase'; 
} 
else{ 
    echo 'nope, its not upper case'; 
} 
+0

什麼意思$ str {0}?我不知道這種符號... – 2010-05-12 09:16:42

+0

$ str {0}與$ str [0]相同。有時substr(字符串,開始,長度)在開始或長度爲負數時非常有用。 – karmakaze 2012-09-13 06:43:04

3

請注意,PHP提供了ctype系列,如ctype_upper

您必須首先通過setLocale()正確設置區域設置才能使其與UTF-8一起使用。
查看關於ctype_alpha的評論。

用法:

if (ctype_upper($str[0])) { 
    // deal with 1st char of $str is uppercase 
} 
4

我不想號碼和別人是上焦,所以我用:

if(preg_match('/[A-Z]$/',$char)==true) 
{ 
    // this must be an upper char 
    echo $char 
} 
21

使用ctype_upper進行檢查大寫:

$a = array("Word", "word", "wOrd"); 

foreach($a as $w) 
{ 
    if(ctype_upper($w{0})) 
    { 
     print $w; 
    } 
} 
+2

這並不非拉丁字符,如北歐ÆØÅ工作。 – qualbeen 2014-03-12 09:46:06

1

怎麼樣:

if (ucfirst($string) == $string) {dosomething();} 
0

如果你想在一個不錯的功能,我用這個:

function _is_upper ($in_string) 
{ 
    return($in_string === strtoupper($in_string) ? true : false); 
} 

然後只需調用..

if (_is_upper($mystring)) 
{ 
    // Do.... 
} 
1
if(ctype_upper(&value)){ 
    echo 'uppercase'; 
} 
else { 
    echo 'not upper case'; 
} 
4

正如Kohana的2自動功能使用:

echo $char < 'a' ? 'uppercase' : 'lowercase'; 

當一個字符串被轉換爲整數r評估爲其ASCII碼。正如您在ASCII表格中首先知道的那樣,有一些控制字符和其他字符。然後是拉丁字母的大寫字母。然後是拉丁字母的小寫字母。因此,您可以輕鬆檢查一個字母的代碼是否小於或大於小拉丁字符a

順便說一句,這比具有正則表達式的解決方案快兩倍。

+1

雖然這隻適用於拉丁字符。 – 2013-05-14 10:01:25

+0

這是甚至在utf中最快的 – 2017-01-05 00:01:09