2016-10-08 150 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