2016-10-08 82 views
0

我想在SQL INSERT語句中格式化名稱字符串。名稱字符串可以包含多個版本的空格(''),短劃線(' - ')和點('。')。名稱字符串應該是首字母大寫的格式。請參見下面的例子:MYSQL - 帶分隔符的格式名稱字符串

  • 李四 - >李四
  • AL ARMIN能 - >鋁阿明能
  • 數學-LY哈倫 - >數學-LY哈倫
  • 聖約翰 - > ST約翰

找到一個特殊字符是可能的,但找到一個組合是困難的部分。我會很感激任何想法。

也許它是有道理的,檢查字符串是否已經正確格式化,但只有這樣才能簡化事情。

+0

你試過了什麼? – RiggsFolly

+0

我使用類似CASE的名字LIKE'% - %'來定位單個特殊字符。 – user3931315

+0

可能的重複[如何在MySQL中實現initcap功能?](http://stackoverflow.com/questions/12364086/how-can-i-achieve-initcap-functionality-in-mysql) –

回答

0

感謝您的所有意見。 Initcap函數啓動了我的正確路徑。我想分享我使用的代碼,這正是我所需要的。這也適用於Umlaute並檢查空格,點和短劃線。

function initCap($string){ 
    mb_internal_encoding('UTF-8'); 
    $return_string =''; 
    $pattern='/[\wäöüÄÖÜßáéíóúÁÉÍÓÚ]+[\s\.\-]+/'; 
    if(preg_match($pattern, $string)){ 
     while(preg_match($pattern,$string,$temp_array,PREG_OFFSET_CAPTURE,strlen($return_string))){ 
      if(stripos($temp_array[0][0],'von ')===0 ||stripos($temp_array[0][0],'der ')===0){ 
       $return_string.=strtolower($temp_array[0][0]); 
      }else { 
       $convert = mb_strtolower($temp_array[0][0]); 
       $return_string .= mb_strtoupper(mb_substr($convert,0,1)).mb_substr($convert,1); 
      } 
     } 
     $return_string.=ucfirst(strtolower(substr($string,strlen($return_string)))); 

    } else { 
     $convert = mb_strtolower($string); 
     $return_string = mb_strtoupper(mb_substr($convert,0,1)).mb_substr($convert,1); 
    } 
    return $return_string; 
} 
+0

該函數的任何改進都是值得歡迎的。 – user3931315