2012-01-23 83 views
13

Tôi đang tìm cách viết hoa chữ cái đầu tiên của chuỗi, bao gồm cả tên được nối bằng dấu nối, chẳng hạn như adam smith- jones cần phải là Adam Smith-Jones.Cách viết hoa chữ cái đầu tiên sau dấu gạch ngang, nghĩa là Adam Smith-Jones

ucwords() (hoặc ucfirst() nếu tôi chia chúng thành firstname, lastname) chỉ làm Adam Smith-jones

+2

bạn đưa ra một số giả định lớn về tên. http://old.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ –

+0

bài viết rất dễ thương, nhưng tác giả là một nhà phát triển phần mềm chứ không phải là quản trị viên db đã từng thấy nhiều trường hợp thực tế . Db khách hàng của tôi sử dụng có rất nhiều cá nhân với các vấn đề trên, nó có thể không được Smith-Jones, nhưng giống như Salafi-Verjastani – MonOve

+0

Bạn đang đưa ra giả định lớn về tên. http://cowbelljs.blogspot.com/2012/01/whats-in-name-database.html – Incognito

Trả lời

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); 

?> 

Something giống như này - chưa được kiểm tra - nhằm mục đích đảm bảo tôi hiểu câu hỏi.

7

Điều này có được không?

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

cách khác:

<?php 

$str = 'adam smith-jones'; 

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

?> 
+2

Công cụ sửa đổi '/ e' không được dùng nữa. Chỉ cần sử dụng 'preg_replace_callback()' để thay thế. –

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

Bạn nghĩ gì về đoạn mã sau?

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

Xin lưu ý rằng điều này cũng xử lý các ký tự có dấu (hữu ích cho một số ngôn ngữ như tiếng Pháp).

+4

thậm chí tốt hơn: mb_convert_case (mb_strtolower (giá trị $, "UTF-8"), MB_CASE_TITLE, "UTF-8"); – wanted

Các vấn đề liên quan