【问题标题】:A PHP Function to Convert ALL CAPS Paragraph String to Regular Case?将所有大写段落字符串转换为正则大小写的 PHP 函数?
【发布时间】:2011-03-21 23:56:14
【问题描述】:

我正在寻找一个快速的函数,它将接收一个字符串作为参数并接受这个输入:

LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISCING ELIT. SUSPENDISSE ET QUAM
EU LACUS SCELERISQUE GRAVIDA. DONEC PELLENTESQUE DICTUM DOLOR VEL PULVINAR.
NUNC RHONCUS, ERAT EU SUSCIPIT ALIQUET, RISUS NUNC DICTUM MAGNA, AC ALIQUAM
NIBH NULLA EGET DOLOR. SUSPENDISSE POTENTI. MAECENAS ULLAMCORPER DIAM NON URNA
VEHICULA ET ULTRICIES TURPIS INTERDUM. PHASELLUS INTERDUM MAGNA ET EROS CURSUS
TRISTIQUE.

并返回此输出:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse et quam
eu lacus scelerisque gravida. Donec pellentesque dictum dolor vel pulvinar.
Nunc rhoncus, erat eu suscipit aliquet, risus nunc dictum magna, ac aliquam
nibh nulla eget dolor. Suspendisse potenti. Maecenas ullamcorper diam non urna
vehicula et ultricies turpis interdum. Phasellus interdum magna et eros cursus
tristique.

有人知道现有的吗?如果没有必要,尽量不要重新创建轮子。

【问题讨论】:

    标签: php optimization string performance


    【解决方案1】:

    嗯,我想到了:

    $sentences = array_map('ucfirst',
                 array_map('trim',
                 array_map('strtolower', explode('.', $input))));
    $output = implode('. ', $sentences).'.';
    

    不是万无一失的,也不是非常有效,但它会让你完成 98% 的工作。您可以根据自己的需要滚动(部分)自己,用努力换取定制/效率。

    更新:最初的答案有一个错误:explode 在每行的开头留下一个空格,然后ucfirst 失败,因为第一个字符是空格。将trim 添加到组合中以解决该问题并使其“更正确”。

    我还在输出中添加了一个尾随 .

    【讨论】:

    • 输出需要在末尾附加一个.,但我想这在 2% 之内。
    • @Wooble:很好,已修改以涵盖这一点。
    • ucfirst 和 strtolower 都不是 Unicode-Save。将 strtolower 替换为 mb_strtolower,将 ucfirst 替换为 mb_convert_case(trim($input), MB_CASE_TITLE, 'UTF-8');
    • @Benjamin:支持评论以使其更明显,但这取决于字符集是什么。只有@Kirk 知道,所以他可以酌情修改。
    【解决方案2】:

    另一个解决方案,直接来自manual

    function ucfirst_sentence($str)
    {
        return preg_replace('/\b(\w)/e', 'strtoupper("$1")', $str);
    }
    
    $text = strtowlower($initialText);
    echo ucfirst_sentence($text);
    

    【讨论】:

      【解决方案3】:

      只需使用strotolower($string)

      忽略,没看到你需要句子大小写。

      但请注意这一点,因为并非所有句点都应该在它们之后有一个大写字母(例如停顿...),或者您可能会将名称/专有名词等转换为小写。 p>

      【讨论】:

      • 这会使整个字符串变成小写,这不是他想要的。
      • 啊,是的,我看到了大写的单词:/
      猜你喜欢
      • 2011-01-16
      • 2022-01-19
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2017-05-18
      • 2019-05-15
      • 2014-09-27
      相关资源
      最近更新 更多