仅当第一个字母不是大写字母时,才将字符串转换为小写字母

时间:2013-10-01 21:40:13

标签: php

所以我必须制作一个包含可以填写的文本区域(用空格分隔的单词)的网页。

因此,文本中的每个单词(每行一个单词)必须显示在屏幕上,其中大写的每个单词都转换为小写,除非正在处理的单词的第一个字母是大写。

示例:''tHIs是StacKOverFlOW SiTE''将''这是Stackoverflow站点“

我知道我必须使用explode(),strotoupper()和strotolower()我无法使代码正常工作。

3 个答案:

答案 0 :(得分:2)

function lower_tail($str) {
    return $str[0].strtolower(substr($str, 1));
}

$sentence = "tHIs is the StacKOverFlOW SiTE";
$new_sentence = implode(' ', array_map('lower_tail', explode(' ', $sentence)));

<强>更新

这是一个更好的版本,可以处理其他一些情况:

$sentence = "Is tHIs, the StacKOverFlOW SiTE?\n(I doN'T know) [A.C.R.O.N.Y.M] 3AM";
$new_sentence = preg_replace_callback(
    "/(?<=\b\w)(['\w]+)/",
    function($matches) { return strtolower($matches[1]); },
    $sentence);
echo $new_sentence; 
// Is this, the Stackoverflow Site?
// (I don't know) [A.C.R.O.N.Y.M] 3am
// OUTPUT OF OLD VERSION:
// Is this, the Stackoverflow Site?
// (i don't know) [a.c.r.o.n.y.m] 3am

(注:PHP 5.3 +)

答案 1 :(得分:1)

$text = 'tHIs is the StacKOverFlOW SiTE';
$oldWords = explode(' ', $text);
$newWords = array();

foreach ($oldWords as $word) {
    if ($word[0] == strtoupper($word[0])
        $word = ucfirst(strtolower($word));
    else
        $word = strtolower($word);

    $newWords[] = $word;
}

答案 2 :(得分:0)

我会这样写的

$tabtext=explode(' ',$yourtext);
foreach($tabtext as $k=>$v)
{
    $tabtext[$k]=substr($v,0,1).strtolower(substr($v,1));
}
$yourtext=implode(' ',$tabtext);