是否有内置的php函数或简单(高效!)的方法来组合内置函数,给出一个字符串句子(“Sentence one.Sentence two。”)?
PHP有类似的内置函数,但我找不到任何我的目的:
ucfirst(strtolower("SENTENCE ONE. AND HERE'S TWO."))
返回“一句话。这是两个。”; ucwords(strtolower("SENTENCE ONE. AND HERE'S TWO."))
“一句话。这是两个。”
答案 0 :(得分:2)
你可以将字符串拆分为“。”,然后ucfirst每个句子。不是最优雅的解决方案,但它确实有效。
$sentences = explode(".",$paragraph);
$text = "";
foreach($sentences as $sentence) {
$text .= ucfirst(strtolower($sentence)).".";
}
答案 1 :(得分:2)
试试这个:
function sentenceCase($s){
$str = strtolower($s);
$cap = true;
for($x = 0; $x < strlen($str); $x++){
$letter = substr($str, $x, 1);
if($letter == "." || $letter == "!" || $letter == "?"){
$cap = true;
}elseif($letter != " " && $cap == true){
$letter = strtoupper($letter);
$cap = false;
}
$ret .= $letter;
}
return $ret;
}
取自php.net不仅仅是作为行结尾的句点。
答案 2 :(得分:2)
function sentence_case($str) {
$cap = true;
$ret='';
for($x = 0; $x < strlen($str); $x++){
$letter = substr($str, $x, 1);
if($letter == "." || $letter == "!" || $letter == "?"){
$cap = true;
}elseif($letter != " " && $cap == true){
$letter = strtoupper($letter);
$cap = false;
}
$ret .= $letter;
}
return $ret;
}
这将保留现有的专有名词大写,首字母缩略词和缩写。
答案 3 :(得分:0)
我使用preg_split想出了这个解决方案。它将尝试在.
边界上分割句子,在句点之后有一个或多个空格。
它仍然非常有效,但可以说它不那么爆炸了。
<?php
$str = "SENTENCE ONE. AND HERE'S TWO.";
$sentences = preg_split('/(\.\s+)/', $str, null, PREG_SPLIT_DELIM_CAPTURE);
array_walk(&$sentences, create_function('&$val', '$val = ucfirst(strtolower($val));'));
$str = implode('', $sentences);
echo $str; // Sentence one. And here's two.
答案 4 :(得分:0)
不仅可以使用空格,还可以使用新的换行符。
function sentenceCase($text){
$cap = true; $newText = '';
for($x = 0; $x < strlen($text); $x++){
$letter = substr($text, $x, 1);
if($letter == '.' || $letter == '!' || $letter == '?' || $letter == "\n"){
$cap = true;
} elseif($letter != ' ' && $cap == true){
$letter = strtoupper($letter);
$cap = false;
}
$newText .= $letter;
}
return $newText;
}