将第一个字母设为大写字母,将其余字母设为小写字母

时间:2012-01-04 23:50:45

标签: php uppercase lowercase

全部, 我正在尝试将姓氏插入数据库。我希望第一个字母大写为名称,如果他们使用两个姓氏,则将第一个和第二个名称大写。例如,如果有人进入:

marriedname maidenname

如果有两个以上的名字,它会将此转换为Marriedname Maidenname等等。另一种情况是有人在他们的名字中有一个撇号,所以如果有人进入,那么无论如何都要这样做:

的O'Connell

这需要转换为O'Connell。我正在使用:

ucfirst(strtolower($last_name));

但是,正如您所知,这对所有场景都不起作用。谢谢你的建议!

10 个答案:

答案 0 :(得分:34)

这将使所有单词的首字母和撇号后的字母大写。它会使所有其他字母小写。它应该适合你:

str_replace('\' ', '\'', ucwords(str_replace('\'', '\' ', strtolower($last_name))));

答案 1 :(得分:22)

你可以试一试这个词

<?php echo ucwords(strtolower('Dhaka, JAMALPUR, sarishabari')) ?>

结果是:Dhaka, Jamalpur, Sarishabari

答案 2 :(得分:21)

这些都不是UTF8友好的,所以这里有一个完美无瑕的(到目前为止)

function titleCase($string, $delimiters = array(" ", "-", ".", "'", "O'", "Mc"), $exceptions = array("and", "to", "of", "das", "dos", "I", "II", "III", "IV", "V", "VI"))
{
    /*
     * Exceptions in lower case are words you don't want converted
     * Exceptions all in upper case are any words you don't want converted to title case
     *   but should be converted to upper case, e.g.:
     *   king henry viii or king henry Viii should be King Henry VIII
     */
    $string = mb_convert_case($string, MB_CASE_TITLE, "UTF-8");
    foreach ($delimiters as $dlnr => $delimiter) {
        $words = explode($delimiter, $string);
        $newwords = array();
        foreach ($words as $wordnr => $word) {
            if (in_array(mb_strtoupper($word, "UTF-8"), $exceptions)) {
                // check exceptions list for any words that should be in upper case
                $word = mb_strtoupper($word, "UTF-8");
            } elseif (in_array(mb_strtolower($word, "UTF-8"), $exceptions)) {
                // check exceptions list for any words that should be in upper case
                $word = mb_strtolower($word, "UTF-8");
            } elseif (!in_array($word, $exceptions)) {
                // convert to uppercase (non-utf8 only)
                $word = ucfirst($word);
            }
            array_push($newwords, $word);
        }
        $string = join($delimiter, $newwords);
   }//foreach
   return $string;
}

用法:

$s = 'SÃO JOÃO DOS SANTOS';
$v = titleCase($s); // 'São João dos Santos' 

答案 3 :(得分:5)

使用此内置功能:

ucwords('string');

答案 4 :(得分:2)

我不相信会有一个很好的答案涵盖所有情景。 ucwords的PHP.net论坛有相当多的讨论,但似乎没有一个答案。我建议你使用大写标准化或单独留下用户的输入。

答案 5 :(得分:1)

您可以将preg_replacee标志一起使用(执行php函数):

function processReplacement($one, $two)
{
  return $one . strtoupper($two);
}

$name = "bob o'conner";
$name = preg_replace("/(^|[^a-zA-Z])([a-z])/e","processReplacement('$1', '$2')", $name);

var_dump($name); // output "Bob O'Conner"

也许可以改进正则表达式模式,但我所做的是:

  • $1是行的开头或任何非字母字符。
  • $2是任何小写字母字符

然后我们用简单processReplacement()函数的结果替换它们。

如果您使用的是PHP 5.3,则可能需要使processReplacement()成为匿名函数。

答案 6 :(得分:1)

对于主要问题,这是一个更简单,更直接的答案。下面的函数模仿PHP方法。如果PHP在将来使用其命名空间扩展它,则首先检查测试。我在我的wordpress安装中使用这种防水语言。

$str = mb_ucfirst($str, 'UTF-8', true);

这使得第一个字母大写,所有其他小写为Q。如果第三个arg设置为false(默认值),则不会操纵字符串的其余部分。

// Extends PHP
if (!function_exists('mb_ucfirst')) {

function mb_ucfirst($str, $encoding = "UTF-8", $lower_str_end = false) {
    $first_letter = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding);
    $str_end = "";
    if ($lower_str_end) {
        $str_end = mb_strtolower(mb_substr($str, 1, mb_strlen($str, $encoding), $encoding), $encoding);
    } else {
        $str_end = mb_substr($str, 1, mb_strlen($str, $encoding), $encoding);
    }
    $str = $first_letter . $str_end;
    return $str;
}

}

/伦德曼

答案 7 :(得分:0)

首先转换为标题大小写,然后找到第一个撇号和大写NEXT字符。您需要添加许多检查,以确保在撇号之后有一个字符,并且此代码仅适用于一个撇号。例如“Mary O'Callahan O'connell”。

$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
$pos = strpos($str, "'");
if ($pos != FALSE)
{
     $str[$pos+1] = strtoupper($str[$pos+1]);
}

答案 8 :(得分:0)

像这样使用ucfirst(strtolower($var));

答案 9 :(得分:0)

您可以在PHP中使用strtolowerucwords函数。

首先:使用strtolower('inputtedtext') then capitalise all text using ucwords('strtolower')`降低所有输入的文本。

样品:

$text = 'tHis iS sOme tEXt'; <br>
$lower = strtolower($text); &ensp; //this will lower all letter from the text <br>
$upper = ucwords($lower); &ensp; //this will uppercase all first letter from the text <br>

echo $upper;

结果=这是一些文字

您可以在ucwords(strtolower($text));上使用一行代码