2010-05-11 5 views
29

Ich habe Texte in UTF-8 mit diakritischen Zeichen auch, und möchte überprüfen, ob der erste Buchstabe dieses Textes Groß-oder Kleinbuchstaben ist. Wie macht man das?Wie überprüft man, ob der Buchstabe in PHP höher oder niedriger ist?

+0

@Elizabeth Buckwalter Warum was? –

+0

Warum möchten Sie überprüfen, ob ein Buchstabe höher oder niedriger ist? –

+0

@Elizabeth Buckwalter Weil ich anderen Text aus diesem Text ausarbeite, und wenn dieser erste Buchstabe höher ist als ich muss das gleiche mit dem zweiten tun. –

Antwort

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

anzumerken, dass mb_substr ist notwendig, um richtig um das erste Zeichen zu isolieren.

+1

danke, deine Antwort ist richtig. Sie können $ str [0] nicht für UTF-8-Strings verwenden. –

+3

Funktioniert nicht immer. Es gibt Unicode-Zeichen, die Großbuchstaben (d. H. Kategorie Lu) sind, aber keine Kleinbuchstaben-Zuordnung haben. Meistens die mathematisch fett/kursiv/doppelt gedrückten Buchstaben. – dan04

+1

@ dan04 Das ist ein ausgezeichneter Punkt. Darüber hinaus gibt es Title Case (LT).Die MBString-Erweiterung stellt Funktionen jedoch nicht dem Benutzerbereich zur Verfügung, um nach diesen Eigenschaften zu suchen. Es ist schade, weil die Funktionalität dort ist - siehe http://svn.php.net/viewvc/php/php-src/trunk/ext/mbstring/php_unicode.h?revision=296679&view=markup – Artefacto

10

Versucht?

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

Was bedeutet $ str {0}? Ich kenne diese Notation nicht ... –

+0

$ str {0} ist dasselbe wie $ str [0]. Manchmal ist substr (string, start, length) nützlich, wenn Start oder Länge negativ sind. – karmakaze

3

Beachten Sie, dass PHP die ctype Familie wie ctype_upper bereitstellt.

Sie müssen das Gebietsschema korrekt über setLocale() zuerst setzen, um es mit UTF-8 zu arbeiten.
Siehe den Kommentar auf ctype_alpha zum Beispiel.

Verbrauch:

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

Ich wollte nicht, dass Zahlen und andere ein oberes Zeichen sein, also ich benutze:

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

Verwenden ctype_upper für die Check Großbuchstaben:

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

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

Dies funktioniert nicht mit nicht-lateinischen Zeichen, wie der nordischen ÆØÅ. – qualbeen

1

Was ist mit nur:

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

Wenn Sie es in einer netten Funktion wollen, habe ich benutzten:

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

Dann rufen Sie einfach ..

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

Wie in Kohana 2 Autoloader-Funktion verwendet:

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

Wenn ein String-Zeichen in Intege umgewandelt wird r es bewertet seine ASCII-Nummer. Wie Sie in der ASCII-Tabelle zuerst wissen, gibt es einige Steuerzeichen und andere. Dann die Großbuchstaben aus dem lateinischen Alphabet. Und dann die Kleinbuchstaben aus dem lateinischen Alphabet. So können Sie leicht überprüfen, ob der Code eines Buchstabens kleiner oder größer als der kleine lateinische Buchstabe a ist.

BTW das ist etwa doppelt so schnell wie eine Lösung mit regulären Ausdrücken.

+1

Dies funktioniert jedoch nur mit lateinischen Zeichen. –

+0

das ist das schnellste sogar in utf –

Verwandte Themen