2

我有两种类型的字符串,hellohelloThere.

我想要的是改变它们,使它们看起来像:HelloHello There视情况而定。

这样做的好方法是什么?

4

8 回答 8

7

要将 CamelCase 转换为不同的单词:

preg_replace('/([^A-Z])([A-Z])/', "$1 $2", $string)

将所有单词的首字母大写:

ucwords()

所以一起:

ucwords(preg_replace('/([^A-Z])([A-Z])/', "$1 $2", $string))
于 2010-08-05T14:52:48.000 回答
5

使用ucwords功能:

如果该字符是字母,则返回一个字符串,其中 str 中每个单词的第一个字符大写。

单词的定义是紧跟在空格之后的任何字符串(它们是:空格、换页符、换行符、回车、水平制表符和垂直制表符)。

这不会拆分拼在一起的单词 - 您必须根据需要在字符串中添加空格才能使此功能正常工作。

于 2010-08-05T14:49:12.140 回答
4

使用ucwords功能:

echo ucwords('hello world');
于 2010-08-05T14:50:37.530 回答
1

为了使其适用于其他语言,UTF-8 可能是一个好主意。我在我的 wordpress 安装中为任何语言使用这个防水。

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

这使第一个字母大写和所有其他小写。如果第三个 arg 设置为 false(默认值),则不会操纵字符串的其余部分。但是,这里的某个人可能会建议一个参数来重用函数本身,并在第一个单词之后将每个单词 mb 大写,以更准确地回答这个问题。

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

}

/ 伦德曼

于 2013-11-27T14:19:50.580 回答
1

PHP 有许多字符串操作函数。ucfirst()会为你做的。

http://ca3.php.net/manual/en/function.ucfirst.php

于 2010-08-05T14:49:49.457 回答
1

你可以ucwords像每个人说的那样使用......添加helloThere你可以做$with_space = preg_replace('/[A-Z]/'," $0",$string);的空间ucwords($with_space);

于 2010-08-05T14:53:55.680 回答
1

使用 ucwords

<?php
$foo = 'hello world';
$foo = ucwords($foo);             // Hello world

$bar = 'BONJOUR TOUT LE MONDE!';
$bar = ucwords($bar);             // HELLO WORLD
$bar = ucwords(strtolower($bar)); // Hello World
?>
于 2010-08-05T14:56:43.210 回答
0

你不需要捕获任何字母来注入单词之间的空间——前瞻就可以了。然后在添加空格后应用多字节安全的标题大小写函数。

代码:(演示

echo mb_convert_case(
         preg_replace('~(?=\p{Lu})~u', ' ','helloThere'),
         MB_CASE_TITLE
     );
// Hello There
于 2021-08-13T15:43:42.407 回答