【问题标题】:Make all words lowercase and the first letter of each word uppercase使所有单词小写,每个单词的首字母大写
【发布时间】:2015-12-10 10:32:37
【问题描述】:

我有一个大小写不正确的字符串,如下所示:

$str = "tHis iS a StRinG thAt NeEds ProPer CapiTilization";
$newStr = ucfirst($str);
echo $newStr;

如何将每个单词的第一个字母大写,而将错误大写的字母小写?我需要字符串完全是标题大小写。

我知道我可以更改为更低,然后使用ucwords(),但有更短的方法吗?

【问题讨论】:

  • 首先将所有内容转换为小写,然后使用ucfirst
  • 是的,我想到了,但是有这个功能吗?
  • proper() 来自什么语言,您能否链接到文档以便潜在的回答者知道您想要的结果是什么?

标签: php string title-case ucfirst


【解决方案1】:

我怎样才能将每个单词的第一个字母大写,而将不正确大写的字母小写?

ucwords() 将大写每个单词的第一个字母。您可以将它与strtolower() 结合起来,首先将所有内容小写。

例如:

ucwords(strtolower('HELLO WORLD!')); // Hello World!

【讨论】:

  • 是的,ucwords 是原生 PHP 函数。
  • PHP 中没有 proper() 的等价物。
  • 是的,我误会了。没有直接等同于proper,但这种组合可以完成。
【解决方案2】:

an earlier question where I have already suggested mb_convert_case(),但该问题中的示例文本相当乏味。

有一个本地函数可以对字符串中的多个单词执行标题大小写,并且它是多字节安全的。这是一个很好的解决方案,因为在将所有单词的前导字母变为大写之前,您无需将字符串全部设为小写。

代码:(Demo)

$string = "tHis iS a StRinG thAt NeEds ProPer CapiTilization";
echo mb_convert_case($string, MB_CASE_TITLE, 'UTF-8');

输出:

This Is A String That Needs Proper Capitilization

Laravel 还提供了一个可以使用的辅助方法:title()

use Illuminate\Support\Str;

$converted = Str::of('a nice title uses the correct case')->title();

// A Nice Title Uses The Correct Case

来源:https://laravel.com/docs/8.x/helpers#method-fluent-str-title

【讨论】:

  • 很好的答案。最后一个参数是可选的,大部分时间不应指定。
  • 是默认的吗?我没有检查。我刚刚检查过——默认是null
  • 默认为null,然后取内部编码,默认为UTF-8
【解决方案3】:

是的,你可以用ucwords()strtolower()这两个函数来实现

<?php
    $str = "tHis iS a StRinG thAt NeEds ProPer CapiTilization";
    $newStr = ucwords(strtolower($str));
    echo $newStr;
?>

说明:

strtolower() 将使您的所有字符串变为小写。

现在,在结果字符串上应用ucwords() 将生成每个世界首都的首字母,这将产生所需的输出。

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2016-10-31
    • 2016-12-05
    • 2015-11-10
    • 1970-01-01
    • 2016-12-23
    • 2015-11-04
    • 2017-08-02
    • 2012-11-11
    相关资源
    最近更新 更多