拆分字符串名字和姓氏(首都和小写)

时间:2016-10-24 11:57:29

标签: php regex explode uppercase lowercase

<?php
$string1 = "FARMER John";
$string2 = "OVERMARS DE Rafa";
$string3 = "VAN DER BELT Dick";
?>

要在mysql数据库中保存first和lastname,我需要拆分字符串。 上面你可以看到一些例子。

分割此字符串的最佳方法是什么,请注意,姓氏是大写字母。

结果应该是:

ResultString1:John FARMER

ResultString2:Rafa OVERMARS DE

ResultString3:Dick VAN DER BELT

4 个答案:

答案 0 :(得分:1)

这是一个非常糟糕的主意。

如果您纯粹依赖信件来表示某些事情,那么可能会出错。并将其全部保存在另一个字符串中只会使问题永久化。

也就是说,您可以通过单独存储新值来缓解(少量)坏处,以免将非结构化信息传递给必须维护数据库的下一个不幸的人。这段代码可以做到这一点,同时也允许使用多字首字母(例如&#34; John Paul&#34;等等)。

我也让它以数组的形式处理它们,因为我认为你可能想要处理三个以上的名字。

<?php

$string1 = "FARMER John";
$string2 = "OVERMARS DE Rafa Dafa";
$string3 = "VAN DER BELT Dick";
$strings = array(array('orig'=>$string1), array('orig'=>$string2), array('orig'=>$string3));
foreach($strings as $key=>$val){
    $oldwords = explode(' ',$val['orig']);
        foreach($oldwords as $word){
            if(preg_match('/[a-z]/',$word)){
              $firstname .= " ".$word;
            }else{
              $lastname .= " ".$word;
        }
    }
    $firstname = trim($firstname);
    $lastname = trim($lastname);
    $strings[$key]['newfirst'] = $firstname;
    $strings[$key]['newlast'] = $lastname;
    $firstname = "";
    $lastname = "";
}
print_r($strings);

?>

答案 1 :(得分:0)

请按照以下步骤操作:

  1. 出现空格时将字符串转换为数组。
  2. 使用array_pop弹出最后一个数组元素(显然是名字)。
  3. 使用array_unshift
  4. 将弹出的名称插入前面
  5. 将数组转换回字符串。

    $string3 = "VAN DER BELT Dick";
    
    $arr = explode(" ", $string3);
    array_unshift($arr, array_pop($arr));
    echo implode(" ", $arr);     // Dick VAN DER BELT
    

答案 2 :(得分:0)

android:windowSoftInputMode="stateHidden|adjustResize"

答案 3 :(得分:0)

正如其他人所说,你的问题描述相当含糊。但是使用这样的固定模式,你可以通过正则表达式很好地分割名称(假设姓氏总是大写):

<?php
$strings = array("FARMER John", "OVERMARS DE Rafa", "VAN DER BELT Dick");

$regex = '~^([A-Z ]+\b)(\w+)$~';

foreach ($strings as $string) {
    if(preg_match($regex, $string, $match)) {
        $surname = trim($match[1]);
        $forename = trim($match[2]);
        echo "Surname: $surname, Forename: $forename\n";
    }
}

?>

查看有效的demo on ideone.com(以及one on regex101.com)。