Прописать слова в PHP с помощью пользовательского разделителя - PullRequest
2 голосов
/ 13 марта 2010

Мне нужен метод, чтобы использовать каждую первую букву слова. Это то, что я получил до сих пор, и оно работает почти для каждой строки ... но на этом "WELLNESS & RENOMME" ничего не получается.

    // method in stringModify Class
    function capitalizeWords($words, $charList) {

    $capitalizeNext = true;

    for ($i = 0, $max = strlen($words); $i < $max; $i++) {
        if (strpos($charList, $words[$i]) !== false) {
            $`capitalizeNext` = true;
        } else if ($capitalizeNext) {
            $capitalizeNext = false;
            $words[$i] = strtoupper($words[$i]);
        }
    }

    return $words;
    }
    // Calling method
   $stringModify->capitalizeWords("WELLNESS & RENOMME", " -&");

Я надеюсь, что кто-нибудь может мне помочь ... Я пытался в течение 1,5 часов, и понятия не имею. Заранее благодарим за любые советы или подсказки.

редактировать

ucwords () использует "" в качестве разделителя, и я хочу использовать "-", например, тоже.

1010 * редактировать * спасибо вам всем за ваши решения. я пойду спать сейчас, его 7 утра здесь. : D я увижу, какое решение мне больше всего нравится, когда я проснусь, а затем скажу, какое решение я выбрал. редактировать

кажется, что все функции возвращают "wellness & Amp; Renomme" или "wellness & Renomme". Возможно, что-то в моем php.ini испорчено?

Ответы [ 3 ]

1 голос
/ 13 марта 2010
function cb($word){ return ucwords(strtolower($word[0])); }
var_dump(preg_replace_callback('@[A-z]+@i','cb','TESTING-TESTING / TESTING & TEST / testing*&^123!&%&*TEST'));
1 голос
/ 13 марта 2010

Я запутался в том, что именно ты пытаешься сделать.В PHP уже есть функция ucwords(), которая может сделать это, и я не вижу никакой разницы в том, что вы делаете ... Если вы пишете с заглавной буквы первую букву каждого слова, делайте разделителикакая разница?Имеет ли значение вообще, что между двумя словами есть «&»?

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

// method in stringModify Class
function capitalizeWords($words, $charList) {
    $words = strtolower($words); // lowercase everything that isn't capitalized
    for ($i = 0; $i < strlen($words); $i++) {
        if (strpos($charList, $words[$i]) !== false) $words[$i+1] = strtoupper($words[$i+1]);
    }
    return $words;
}
// Calling method
$stringModify->capitalizeWords("WELLNESS & RENOMME", " -&");
0 голосов
/ 02 января 2014

Для преобразования заглавной буквы во всех предложениях используйте код ниже.

Ex)

$string = strtolower($string);
echo preg_replace('/(^|[\.!?]"?\s+)([a-z])/e', '"$1" . ucfirst("$2")', $string); 
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...