我正在寻找一个快速的函数,它将接收一个字符串作为参数并接受这个输入:
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.
有人知道现有的吗?如果我不需要,试图不重新创建轮子。
答案 0 :(得分:8)
嗯,这是我想到的:
$sentences = array_map('ucfirst',
array_map('trim',
array_map('strtolower', explode('.', $input))));
$output = implode('. ', $sentences).'.';
不是万无一失或非常有效率,但它会让你获得98%的胜利。您可以根据自己的需要滚动(部分)自己的,自定义/效率的交易工作。
更新:原始答案有一个错误:explode
在每行的开头留下了一个空格,然后ucfirst
失败,因为第一个字符是空格。添加了trim
来修复它并使其“更正确”。
我还在输出中添加了一个尾随.
。
答案 1 :(得分:1)
另一种解决方案,直接来自manual:
function ucfirst_sentence($str)
{
return preg_replace('/\b(\w)/e', 'strtoupper("$1")', $str);
}
$text = strtowlower($initialText);
echo ucfirst_sentence($text);
答案 2 :(得分:0)
只需使用strotolower($string);
无视,没看到你需要判刑。
小心这一点,因为并非所有 的句号都应该在它们后面有一个大写字母(例如暂停...),或者你可能会将名字/专有名词等转换为小写。