2012-01-23 10 views
13

Poszukuję sposobu wprowadzania wielkich liter na pierwszą literę/sz ciągów, w tym miejsca łączenia nazw przez łącznik, np. Jones musi być Adamem Smith-Jones.Jak wpisać wielką literę za łącznikiem, np. Adam Smith-Jones

ucwords() (lub ucfirst() jeśli podzielić je na imię, nazwisko) tylko robi Adam Smith-Jones

+2

Twoje poczynienie dużych założeń dotyczących nazw. http://old.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ –

+0

bardzo ładny artykuł, ale autor jest programistą, a nie administratorem db, który widział wiele prawdziwych przypadków . Baza danych, której używa mój klient, ma wiele osób z powyższym zagadnieniem, może nie być Smith-Jones, ale bardziej jak Salafi-Verjastani – MonOve

+0

Tworzysz duże założenia dotyczące nazw. http://cowbelljs.blogspot.com/2012/01/whats-in-name-database.html – Incognito

Odpowiedz

22
$string = implode('-', array_map('ucfirst', explode('-', $string))); 
0
<?php 
    // note - this does NOT do what you want - but I think does what you said 
    // perhaps you can modify it to do what you want - or we can help if you can 
    // provide a bit more about the data you need to update 
    $string_of_text = "We would like to welcome Adam Smith-jones to our 3rd, 'I am addicted to stackoverflow-posting' event."; 
    // both Smith-Jones and Stackoverflow-Posting should result 
    // may be wrong 
    $words = explode(' ',$string_of_text); 

    foreach($words as $index=>$word) { 
     if(false !== strpos('-',$word)) { 
      $parts = explode('-',$word); 
      $newWords = array; 
      foreach($parts as $wordIndex=>$part) { 
      $newWords[] = ucwords($part); 
      } 
      $words[$index] = implode('-',$newWords); 
     } 
    } 

    $words = implode(' ',$words); 

?> 

coś podobnego do tego - niesprawdzone - dla celów upewniając rozumiem pytanie.

7

Czy to jest w porządku?

function to_upper($name) 
    { 
     $name=ucwords($name); 
     $arr=explode('-', $name); 
     $name=array(); 
     foreach($arr as $v) 
     { 
      $name[]=ucfirst($v); 
     } 
     $name=implode('-', $name); 
     return $name; 
    } 
    echo to_upper("adam smith-jones"); 
4

Inny sposób:

<?php 

$str = 'adam smith-jones'; 

echo preg_replace("/(-)([a-z])/e","'\\1'.strtoupper('\\2')", ucwords($str)); 

?> 
+2

Modyfikator '/ e' jest przestarzały. Zamiast tego użyj 'preg_replace_callback()'. –

1
/** 
* Uppercase words including after a hyphen 
* 
* @param string $text lower-case text 
* @return string Upper-Case text 
*/ 
function uc_hyphenated_words($text) 
{ 
    return str_replace("- ","-",ucwords(str_replace("-","- ",$text))); 
} 
6

Co sądzisz o następującym kodzie?

mb_convert_case(mb_strtolower($value), MB_CASE_TITLE, "UTF-8"); 

Należy pamiętać, że to także obsługuje znaki diakrytyczne (przydatne dla niektórych językach takich jak francuski).

+4

jeszcze lepiej: mb_convert_case (mb_strtolower (wartość $, "UTF-8"), MB_CASE_TITLE, "UTF-8"); – wanted

Powiązane problemy