根据条件向字符串添加空格

时间:2016-05-12 09:43:35

标签: php string

我有很多标签是驼色的。一些例子是

whatData
whoData
deliveryDate
importantQuestions  

我想要做的就是这个。任何带有数据一词的标签都需要删除这个词。在大写字母的位置,我需要提供一个空间。最后,一切都应该是大写的。我已经完成了删除数据和大写($ data->键是标签)

strtoupper(str_replace('Data', '', $data->key))

我正在努力的部分是在单词之间添加空格。所以基本上上面的话应该像这样结束

WHAT
WHO
DELIVERY DATE
IMPORTANT QUESTIONS

我如何考虑最后一部分呢?

由于

4 个答案:

答案 0 :(得分:4)

它会在每个大写字母前添加空格。试试这个:

$String = 'whatData';
$Words = preg_replace('/(?<!\ )[A-Z]/', ' $0', $String);

答案 1 :(得分:3)

<强>问题

  • 您的正则表达式'~^[A-Z]~'将仅匹配第一个大写字母。查看模式语法中的元字符以获取更多信息。
  • 您的替代品是换行符'\n',而不是空格。

<强>解决方案

使用preg_replace()。请尝试以下代码。

$string = "whatData";   
echo preg_replace('/(?<!\ )[A-Z]/', ' $0', $string);

<强>输出

what Data

答案 2 :(得分:0)

请尝试以下操作:

$string = 'importantQuestions';
$string = strtoupper(ltrim(preg_replace('/[A-Z]/', ' $0', $string)));
echo $string;    

这将输出为:

  

重要问题

答案 3 :(得分:0)

试试这个:

preg_split:  split on camel case
array_map:   UPPER case all the element
implode:     Implode the array
str_replace: Replace the `DATE` with empty
trim:        trim the white spaces.

做这些简单的事情:

echo trim(str_replace("DATE", "", implode(" ", array_map("strtoupper", preg_split('/(?=[A-Z])/', 'deliveryDate', -1, PREG_SPLIT_NO_EMPTY))))); // DELIVERY
  

这正是你想要的结果。