MYSQL - 使用分隔符格式化名称字符串

标签 mysql

我想在 SQL INSERT 语句中格式化名称字符串。名称字符串可以包含多个版本的空格 (' ')、破折号 ('-') 和点 ('.')。名称字符串的格式应首字母大写。请参阅以下示例:

  • 约翰·多伊 -> 约翰·多伊
  • 阿尔阿明 jar -> 阿尔阿明 jar
  • 数学-LY Haroun -> 数学-Ly Haroun
  • 圣。约翰 -> 圣约翰

找到一个特殊字符是可能的,但找到组合是困难的部分。我将不胜感激任何想法。

也许检查字符串的格式是否正确是有意义的,但前提是这可以简化事情。

最佳答案

感谢大家的评论。 Initcap 函数让我走上了正确的道路。我想分享我使用的代码,它完全符合我的需要。这也适用于变音符号并检查空格、点和破折号。

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

关于MYSQL - 使用分隔符格式化名称字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39938248/

相关文章:

mysql - MySQL UPDATE 查询中的 "intermediate"变量

mysql - 在mysql中导入数据而不覆盖某些列

mysql - 即使数据库中不存在实体,如何让 hibernate 返回实体

mysql - FLink 应用程序 - MySql 和 MongoDb 的接口(interface)

php - 非常简单的 SQL 函数返回 bool 值 1 (true) 而不是资源

php - 构建一个简单的CMS来管理mysql?

php - 我想使用数字 0-9 作为 mysql 表名。我应该如何使用 `` 反引号编写 sql 查询以防止 sql 查询错误?

php - 如何从包含一组重复值(clm1、clm2、cl3)的表中选择 id?

mysql - str_to_date 不起作用

mysql - 如何坚持但避免唯一键异常?