PHP для заполнения всех букв (в том числе после косой черты), за исключением определенных слов

Я хочу использовать 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]); } 

Прямо сейчас он заглаживает все слова в строке, включая те, которые мне не нужны.

Related of "PHP для заполнения всех букв (в том числе после косой черты), за исключением определенных слов"

Ну, я собирался попробовать рекурсивный вызов 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