Я хочу использовать PHP для очистки некоторых названий, заглавными буквами каждого слова, включая те, которые следуют за косой чертой. Однако я не хочу использовать слова «и», «of» и «the».
Вот две примерные строки:
учетная техника / техник и бухгалтерский учет
ортопедическая хирургия позвоночника
Следует исправить:
Бухгалтерские технологии / Техник и Бухгалтерия
Ортопедическая хирургия позвоночника
Вот что я сейчас имею. Я не уверен, как объединить имплозию с preg_replace_callback.
// Will capitalize all words, including those following a slash $major = implode('/', array_map('ucwords',explode('/',$major))); // Is supposed to selectively capitalize words in the string $major = preg_replace_callback("/[a-zA-Z]+/",'ucfirst_some',$major); function ucfirst_some($match) { $exclude = array('and','of','the'); if ( in_array(strtolower($match[0]),$exclude) ) return $match[0]; return ucfirst($match[0]); }
Прямо сейчас он заглаживает все слова в строке, включая те, которые мне не нужны.
Ну, я собирался попробовать рекурсивный вызов ucfirst_some()
, но ваш код, похоже, отлично работает без первой строки. то есть:
<?php $major = 'accounting technology/technician and bookkeeping'; $major = preg_replace_callback("/[a-zA-Z]+/",'ucfirst_some',$major); echo ucfirst($major); function ucfirst_some($match) { $exclude = array('and','of','the'); if ( in_array(strtolower($match[0]),$exclude) ) return $match[0]; return ucfirst($match[0]); }
Распечатывает требуемую Accounting Technology/Technician and Bookkeeping
.
Ваше регулярное выражение уже соответствует строкам букв, вам, похоже, вообще не нужно беспокоиться о косе. Просто имейте в виду, что число или символ (например, дефис) в середине слова также приведет к заглавной.
Кроме того, не обращайте внимания на людей, которые беспокоятся о вас, о том, что ваш массив $exclude
не является полным, вы всегда можете добавить больше слов, когда сталкиваетесь с ними. Или просто Google для списка.
Следует отметить, что нет единого согласованного «правильного» способа определения того, что следует / не следует капитализировать таким образом.
Вы также хотите убедиться, что в начале предложения используются слова типа a и a, и все они являются шапками.
Примечание. Я не могу придумать никаких таких терминов, которые начинаются с или и в начале, но легче сделать такие вещи, прежде чем нечетные данные ползут в вашей программе.
Существует код snipplet, который я использовал до этого на http://codesnippets.joyent.com/posts/show/716
Он указан на странице функций php.net для ucwords в разделе комментариев http://php.net/manual/en/function.ucwords.php#84920