2016-05-19 15 views
-2

ucwords und ucfirst konvertieren das erste Zeichen aus einer Zeichenfolge in Großbuchstaben.PHP Großbuchstaben ersten Buchstaben aus dem ALPHABET

Ich brauche eine Funktion, um das erste Zeichen aus dem Alphabet groß zu schreiben.

zum Beispiel: ¡hi! -> Hi! das 'h' sollte groß sein, weil das erste Zeichen im Alphabet vorhanden ist.

In Spanisch Wir haben Fragezeichen am Anfang und am Ende eines Wortes/Satzes/Satzes, also hat das Großschreiben des ersten Zeichens mit ucword/ucfirst mein Problem nicht gelöst. Ich muss das erste Alphabet-Zeichen aus einer Zeichenfolge groß schreiben.

Was ist dein Lieblingssport? -> nach dem ersten -> Was ist dein Lieblingssport?

gewünschte Ergebnis:

¿Was ist Ihr Lieblingssport?

////// ------------------ /////// UPDATE /////// ------ ------------ ///////

Dank für die Antwort konnte ich es ändern und die endgültige Funktion erhalten.

Diese Funktion nutzt das erste Alphabet Buchstaben (einschließlich dieser akzentuierte Vokale spanischen á é í ó ú)

function _ucfirst($palabra) { 
    $newStr = ''; 
    $match = 0; 
    foreach(str_split($palabra) as $k=> $letter) { 
     if($match == 0 && preg_match('/^\p{L}*$/', $letter)){ 
      $newStr .= _ucwords($letter); 
      break; 
     }else{ 
      $newStr .= $letter; 
     } 
    } 
    return $newStr.substr($palabra,$k+1); 
} 

function _ucwords($palabra) { 
    return mb_convert_case(mb_strtolower($palabra, 'iso-8859-1'), MB_CASE_TITLE, 'iso-8859-1'); 
} 
+0

etwas mehr Beispiel und Grund Setzen Sie, dies zu tun, warum diese wollen? Und dein Versuch? – C2486

+0

Vielleicht zuerst das Wort aufteilen und dann die Zeichenkette von einem nicht alphabetischen Zeichen trennen, dann die Methode ucfirst ausführen. – claudios

+0

Vielleicht: Entfernen Sie alles, was kein Buchstabe im Alphabet ist und die erste Großschreibung? –

Antwort

1

gebohrt:

<?php 

$str="!34hi Fred hi"; 
$match=0;//no match yet 
$newStr='';//output string 
foreach(str_split($str) as $letter){ //split string for loop 

if($match==0 && ctype_alpha($letter)){//check its a letter and its the first one we found 
    $newStr.=strtoupper($letter);//upper case it and glue it 
    $match=1;// set the match so we don't bother to check any more of the string 

}else{ 
    $newStr .=$letter; //glue the rest of the string 
} 


} 

echo $newStr; //!34Hi Fred hi 

nicht für eine lange Zeichenfolge verwenden, besser zu Brechen Sie die Schleife, sobald Sie die erste Übereinstimmung gefunden haben, aber für eine kurze Zeichenfolge, die keine Rolle spielen sollte.

Lange String-Version, effizienter, auf erste Spiel beendet Looping:

<?php 


$str="!34hi Fred hi"; 
$newStr='';//output string 

foreach(str_split($str) as $k=> $letter){ //split string for loop 

if($match==0 && ctype_alpha($letter)){//check its a letter and its the first one we found 
    $newStr.=strtoupper($letter);//upper case it and glue it 
    break;//stop the foreach on first find, no need to keep looping 
}else{ 
    $newStr .=$letter; //glue the non letters so far found it any 
} 


} 
//add the rest of the sting back in 
echo $newStr.substr($str,$k+1); //!34Hi Fred hi 
+0

das ctype_alpha gibt nicht wahr zurück, wenn ein Vokal eine Akzentmarkierung hat, wie á é í ó ú – Diego

+0

der ctype_alpha gibt nicht zurück, wenn ein Vokal eine Akzentmarkierung wie hat á í í ó ú. Ist das ok? 'if (preg_match ('/^\ p {L} * $ /', utf8_decode ('holá'))) { echo 'ist alpha'; } ' – Diego

+0

@ DIEGOF.G.wenn Sie' setLocale() 'richtig eingestellt haben, dann funktioniert' ctype_alpha'. Und es sollte schneller –

0

Versuchen Sie, diese

$a=strtolower("!34Hi Fred hi"); 
    $k=0; 
    $b=""; 
    for($i=0;$i<strlen($a);$i++){ 
    if(ctype_alpha($a[$i])&&$k==0){ 
     $b.=strtoupper($a[$i]); 
     $k=1; 
    }else{ 
     $b.=$a[$i]; 
    } 
} 
echo $b; 
+0

Header verwenden ('Content-type: text/html; charset = utf-8'); $ a = strtolower ("¡hi!"); für Ihre Eingabe – Akshath

+0

Warum haben Sie meinen Code kopiert? –

+0

ich kopiere nicht deinen Code, Methode war anders – Akshath