Я использую 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));