【问题标题】:How uppercase words with space and "-" between大写单词如何与空格和“-”之间
【发布时间】:2021-07-31 02:18:43
【问题描述】:

我想用

改变一个字符串
hello teSt woRld hEllo-woRld

Hello Test World Hello-World

我做了一些事情,只观察单词之间的空格。 但我需要它用于空格和“-”之间。谁能告诉我如何实现它?

$words = explode(" ", $string);
foreach ( $words as $key=>$value ) {
  $new .= mb_strtoupper( mb_substr( mb_strtolower( $value) , 0, 1, 'UTF-8'), 'UTF-8' ) . 
          mb_substr(mb_strtolower( $value ), 1, null, 'UTF-8') . ' ';
}

【问题讨论】:

  • echo ucwords( strtolower( $str) ); 那么你所需要的只是连字符后面的单词
  • 谢谢,但需要 UTF-8 支持(忘了提),据我所知这不适用于 ucwords

标签: php uppercase


【解决方案1】:

你应该试试这样的:

$string = "hello teSt woRld hEllo-woRld";
echo ucwords(strtolower($string), " -");

ucwords函数的第二个参数是单词分隔符。在这种情况下,单词用空格或连字符分隔。

结果将是:

Hello Test World Hello-World

如果您担心保持 UTF-8 格式,您应该考虑使用mb_convert_case 函数,如下例所示:

$str = "mary had a Little lamb and she loved it so";
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
echo $str; // Display: Mary Had A Little Lamb And She Loved It So

【讨论】:

  • 谢谢,解决方案 2 符合我的需求。我将对其进行一些更改以切断位于第一个或最后一个位置的连字符。太好了!
【解决方案2】:

你也可以用正则表达式来做

$str = 'hello teSt woRld hEllo-woRld';
$str = strtolower($str);

$line = preg_replace_callback(
    '(^\w|\s\w|\-\w)',
    function ($matches) {
        return strtoupper($matches[0]);
    },
    $str
);
echo $line;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多