Сделайте первую букву прописной, а остальные строчными в строке
Все, Я пытаюсь вставить фамилию в базу данных. Я бы хотел, чтобы первая буква была прописной для имени, и если они используют две фамилии, то заглавными буквами пишутся первое и второе имена. Так, например, если кто-то входит:
Имя в браке девичье имя
Он преобразует это в Marriedname Maidenname и так далее, если существует более двух имен. Другой сценарий заключается в том, что у кого-то есть апостроф в их имени, так есть ли в любом случае, чтобы сделать это, если кто-то входит:
О'Коннелл
Это нужно было бы преобразовать в O'Connell. Я использовал:
ucfirst(strtolower($last_name));
Однако, как вы можете сказать, это не сработает для всех сценариев. Спасибо за любые советы!10 ответов:
Это будет заглавными буквами все первые буквы слова, а также буквы сразу после Апострофа. Он сделает все остальные буквы строчными. Это должно работать для вас:
str_replace('\' ', '\'', ucwords(str_replace('\'', '\' ', strtolower($last_name))));
Вы можете попробовать это для word'S
<?php echo ucwords(strtolower('Dhaka, JAMALPUR, sarishabari')) ?>
Результат:
Dhaka, Jamalpur, Sarishabari
Ни один из них не является дружественным UTF8, поэтому вот один, который работает безупречно (до сих пор)
function titleCase($string, $delimiters = array(" ", "-", ".", "'", "O'", "Mc"), $exceptions = array("and", "to", "of", "das", "dos", "I", "II", "III", "IV", "V", "VI")) { /* * Exceptions in lower case are words you don't want converted * Exceptions all in upper case are any words you don't want converted to title case * but should be converted to upper case, e.g.: * king henry viii or king henry Viii should be King Henry VIII */ $string = mb_convert_case($string, MB_CASE_TITLE, "UTF-8"); foreach ($delimiters as $dlnr => $delimiter) { $words = explode($delimiter, $string); $newwords = array(); foreach ($words as $wordnr => $word) { if (in_array(mb_strtoupper($word, "UTF-8"), $exceptions)) { // check exceptions list for any words that should be in upper case $word = mb_strtoupper($word, "UTF-8"); } elseif (in_array(mb_strtolower($word, "UTF-8"), $exceptions)) { // check exceptions list for any words that should be in upper case $word = mb_strtolower($word, "UTF-8"); } elseif (!in_array($word, $exceptions)) { // convert to uppercase (non-utf8 only) $word = ucfirst($word); } array_push($newwords, $word); } $string = join($delimiter, $newwords); }//foreach return $string; }
Использование:
$s = 'SÃO JOÃO DOS SANTOS'; $v = titleCase($s); // 'São João dos Santos'
Я не верю, что найдется один хороший ответ, который охватит все сценарии для вас. Тот самый PHP.net форум для
ucwords
имеет изрядное количество дискуссий, но ни один, кажется, не имеет ответа для всех. Я бы рекомендовал вам стандартизировать либо использование прописных букв, либо оставить ввод пользователя в покое.
Вы можете использовать
preg_replace
с флагомe
(выполнить функцию php):function processReplacement($one, $two) { return $one . strtoupper($two); } $name = "bob o'conner"; $name = preg_replace("/(^|[^a-zA-Z])([a-z])/e","processReplacement('$1', '$2')", $name); var_dump($name); // output "Bob O'Conner"
Возможно, шаблон регулярных выражений можно было бы улучшить, но я сделал следующее:
$1
-это либо начало строки , либо любого неалфавитного символа.$2
- любой строчный алфавитный символЗатем мы заменим оба этих результата простой функцией
processReplacement()
.Если у вас есть PHP 5.3, вероятно, стоит сделать
processReplacement()
анонимным функция.
Это несколько более простой и более прямой ответ на главный вопрос. функция, приведенная ниже, имитирует РНР подходы. На всякий случай, если PHP расширит это пространство имен в будущем, сначала проверяется тест. Я использую это доказательство воды для любых языков в моих установках wordpress.
$str = mb_ucfirst($str, 'UTF-8', true);
Это делает первую букву прописной, а все остальные строчные, как Q было. Если третий arg имеет значение false (по умолчанию), то остальная часть строки не обрабатывается.
// Extends PHP if (!function_exists('mb_ucfirst')) { function mb_ucfirst($str, $encoding = "UTF-8", $lower_str_end = false) { $first_letter = mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding); $str_end = ""; if ($lower_str_end) { $str_end = mb_strtolower(mb_substr($str, 1, mb_strlen($str, $encoding), $encoding), $encoding); } else { $str_end = mb_substr($str, 1, mb_strlen($str, $encoding), $encoding); } $str = $first_letter . $str_end; return $str; } }
/ Лундман
Сначала преобразуем в регистр заголовка, затем находим первый апостроф и прописные буквы следующего символа. Вам нужно будет добавить много проверок, чтобы убедиться, что после Апострофа Есть символ, и этот код будет работать только на одном Апострофе. например, "Мэри О'Каллахан О'Коннелл".
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8"); $pos = strpos($str, "'"); if ($pos != FALSE) { $str[$pos+1] = strtoupper($str[$pos+1]); }
Вы можете использовать функции
strtolower
иucwords
в PHP.Во-первых: опустите весь введенный текст, используя
strtolower('inputtedtext') then capitalise all text using
ucwords('strtolower')`.Пример:
$text = 'tHis iS sOme tEXt'; <br> $lower = strtolower($text);   //this will lower all letter from the text <br> $upper = ucwords($lower);   //this will uppercase all first letter from the text <br> echo $upper;
Результат = Это Некоторый Текст
Для этого можно использовать один код строки с
ucwords(strtolower($text));