Я хочу передать этот вход
$string = "AL & JRL buSineSS CENTRE is the best";
Ожидаемый результат:
Алабама & Бизнес-центр JRL — лучший
Я попробовал код ниже, но он конвертирует все.
mb_convert_case($string, MB_CASE_TITLE, "UTF-8");
Я так понимаю, вы просто хотите, чтобы потенциальные сокращения игнорировались, верно? Ну, есть несколько мыслей. Во-первых, вы можете создать скрипт, который игнорирует все, что содержит 3 или менее букв. Это не очень хорошее решение, на мой взгляд. А как насчет «это», «то» и т. Д.? Второй использует словарь известных слов для запуска ucwords()
на. Тьфу — это было бы невероятно тяжело для такой, казалось бы, простой задачи!
Я бы порекомендовал просто игнорировать все, что является заглавными. Таким образом, независимо от того, какая аббревиатура (или длина), она будет игнорироваться. Что-то вроде этого может быть достаточно:
$phrase = "Hello this is a TeSt pHrAse, to be tested ASAP. Thanks.";
$chunks = explode(" ", $phrase);
$result = "";
foreach($chunks as $chunk){
if(!ctype_upper($chunk)) {
$result .= ucwords($chunk) . " ";
} else {
$result .= $chunk . " ";
}
}
$result = rtrim($result);
Результат:
Hello This Is A Test Phrase, To Be Tested ASAP. Thanks.
Это не самое элегантное решение, это то, о чем я как бы думал после прочтения вашего вопроса. Тем не менее, если вы знаете свои аббревиатуры будут быть заглавными, это пропустит их целиком и только в заглавных буквах ваших реальных слов.
Предостережения
Приведенный выше пример не будет работать с аббревиатурой, соединенной со словом через тире, подчеркивание и т. Д. Это работает только через пробел. Вы можете без труда настройте вышесказанное под свои нужды и сделайте его немного умнее. Тем не менее, я хотел быть очень ясным, что это не может удовлетворить все потребности!
Кроме того, этот пример будет коротким в вашей фразе примера. К сожалению, если вы не используете словарь или не считаете длины строк, это самое близкое, что вы получите. Это решение — минимальная работа для большой функциональности. Конечно, отлично подойдет словарь со сравнениями (словарь аббревиатур или слов, в любом случае), но даже тогда будет очень сложно поддерживать актуальность. Имена будут выбрасывать словарь слов, которые можно сменить на case-case. Менее часто используемые сокращения, безусловно, не будет в словаре сокращений. К сожалению, ко всем решениям есть бесконечные предостережения. Выберите, что лучше для вас.
Надеюсь это поможет. Если у вас есть дополнительные вопросы, пожалуйста, прокомментируйте, и я сделаю все возможное, чтобы помочь.
хаотичность
Одна последняя вещь. я использовал ucwords()
, Не стесняйтесь использовать все, что вы хотите. Я уверен, что вы уже знаете разницу, но проверьте это:
Лучшая функция для капитализации заголовка?
Всегда приятно точно знать, какой инструмент лучше всего подходит для работы. Опять же, я уверен, что вы знаете свои собственные потребности, и я уверен, что вы выбрали правильный инструмент. Просто подумал, что это интересное чтение, которое может помочь любому, кто наткнется на это.
Последние мысли
Вы можете использовать комбинацию из приведенных выше примеров, чтобы настроить собственное решение. Часто очень удобно комбинировать методы, тем самым уменьшая недостатки каждого метода.
Надеюсь, это поможет, удачи вам!
Других решений пока нет …