PHP удаляет все кепки

Я использую PHP для вставки записей форм в базу данных MySQL. Иногда пользователи вводят текст во все кепки. Есть ли способ изменить его, чтобы только первые буквы были капитализированы? ucwords(strtolower($word)) не будет работать для меня, потому что я не хочу капитолизировать первую букву, если она еще не заглавная.

Моя главная забота – когда люди представляют свои фамилии. Большинство людей подают его правильно, но некоторые подают его как все шапки. Если это все шапки, он должен работать так же, как и ucwords(strtolower($word)) , но если кто-то представит свое имя Де Ла Роса, я бы не хотел, чтобы он изменился на De La Rosa.

 <?php function ucwordsreplace($matches) { return ucwords(strtolower($matches[0])); } $original = "some UPPERCASE words GO HERE"; $fixed = preg_replace_callback('/\b[AZ]+\b/', "ucwordsreplace", $original); echo $fixed; // some Uppercase words Go Here 

Регулярное выражение соответствует только словам, которые являются полностью заглавными (любое количество заглавных букв со словом границы на каждой стороне), а затем передает каждую из них в определенную функцию, которая возвращает заменяющий текст только с заглавной буквой.

Если вы хотите также предотвратить такие вещи, как UPPERCA $ E, вы можете добавить другие символы в регулярное выражение или даже просто совместить все символы без строчной буквы (используйте [^az] вместо [AZ] ).

Я думаю, что функция, которую вы обозначили, является правильной.

Но каково ваше точное требование.

В примере для использования ucwords

 <?php $foo = 'hello world!'; $foo = ucwords($foo); // Hello World! $bar = 'HELLO WORLD!'; $bar = ucwords($bar); // HELLO WORLD! $bar = ucwords(strtolower($bar)); // Hello World! ?> 

Else, если u хочет, чтобы только первый был в верхнем регистре, а не каждый первый символ строки в верхнем регистре, а затем попробуйте функцию ucfirst ().

ucfirst(strtolower($word));