Обычно я не использую регулярное выражение, но мое решение не совсем то, что вы бы назвали "красивым":
$string = join("", map(ucfirst, split(/(\s+)/, $string)));
То, что split()
s выводит строку через пробел и захватывает все пробелы, затем проходит через каждый элемент списка и делает ucfirst
над ними (делая первый символ заглавными), затем join()
возвращает их вместе одна строка. Не ужасно, но, возможно, вам больше понравится регулярное выражение. Лично мне просто не нравятся \Q
или \U
или другие полу-неловкие конструкции регулярных выражений.
РЕДАКТИРОВАТЬ: Кто-то еще упомянул, что пунктуация может быть потенциальной проблемой. Если, скажем, вы хотите это:
...string
изменено на это:
...String
т.е. Вы хотите, чтобы слова были написаны заглавными буквами, даже если перед ними стоит пунктуация, попробуйте что-то вроде этого:
$string = join("", map(ucfirst, split(/(\w+)/, $string)));
То же самое, но это split()
s для слов (\w+
), так что захваченные элементы списка доступны только для слов. Тот же общий эффект, но он будет использовать слова, начинающиеся с буквы. Измените \w
на [a-zA-Z]
, чтобы избежать попыток использовать числа с большой буквы. И просто настраивайте его так, как вам нравится.