Измените ввод со всего верхнего регистра в обычный регистр - PullRequest
2 голосов
/ 09 июня 2009

Я хотел бы изменить строку в php со всех прописных букв на обычные. Так что каждое предложение будет начинаться с заглавной буквы, а остальное - строчной.

Есть ли простой способ сделать это?

Ответы [ 6 ]

10 голосов
/ 09 июня 2009

Простой способ - использовать strtolower , чтобы сделать строку строчной буквой, и ucfirst , чтобы прописать первый символ следующим образом:

$str=ucfirst(strtolower($str));

Если строка содержит несколько предложений, вам придется написать собственный алгоритм, например, разбить на разделители предложений и обработать каждое предложение по очереди. Как и первый символ, вам могут потребоваться некоторые эвристики для таких слов, как «я» и любых обычных имен собственных, которые встречаются в вашем тексте. Например, как-то так:

$sentences=explode('.', strtolower($str));
$str="";
$sep="";
foreach ($sentences as $sentence)
{
   //upper case first char
   $sentence=ucfirst(trim($sentence));

   //now we do more heuristics, like turn i and i'm into I and I'm
   $sentence=preg_replace('/i([\s\'])/', 'I$1', $sentence);

   //append sentence to output
   $str=$sep.$str;
   $sep=". ";
}
3 голосов
/ 09 июня 2009

Вот функция, которая сделает это:

function sentence_case($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;
}

Источник:

http://codesnippets.joyent.com/posts/show/715

2 голосов
/ 09 июня 2009

Я не знаю ни одного метода, который бы делал это автоматически. Вам, вероятно, придется написать свое собственное с правилами, которые будут принимать в особых случаях, таких как буква «i», которая должна быть написана заглавными буквами, когда она сама по себе. Вы также по-прежнему упускаете возможность использовать такие вещи, как люди и названия мест.

1 голос
/ 09 июня 2009

Если строка содержит только 1 предложение, вы можете использовать:

$string =  ucfirst(strtolower($string));
1 голос
/ 09 июня 2009

Прекрасно возможно

$s = "THIS IS THE LINE I'M GOING TO WORK ON";

$s = ucfirst(strtolower($s));

echo $s; //This is the line I'm going to work on
0 голосов
/ 09 июня 2009

Имейте в виду: не применяйте это ко всем полям ввода!

Люди с инициалами ALL CAPS в именах могут сильно рассердиться, если превратить «Mike DF King» в «Mike DF King»

ура :) 1005 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...