Сделайте первую букву в верхнем регистре, а остальные строчные в строке

Все, я пытаюсь вставить фамилию в базу данных. Я хотел бы, чтобы первое письмо было заглавным для имени, и если у них есть два последних имени, запишите их первое и второе имена. Например, если кто-то входит:

имя молодого человека

Он преобразует это в Marriedname Maidenname и так далее, если будет более двух имен. Другой сценарий заключается в том, что у кого-то есть апостроф в их имени, так что все равно это делается, если кто-то входит:

О'Коннелл

Это нужно будет преобразовать в O'Connell. Я использовал:

ucfirst(strtolower($last_name)); 

Однако, как вы можете сказать, это не будет работать для всех сценариев. Спасибо за любой совет!

Это будет использовать все буквы первого слова и буквы сразу после апострофа. Он сделает все остальные буквы строчными. Он должен работать для вас:

 str_replace('\' ', '\'', ucwords(str_replace('\'', '\' ', strtolower($last_name)))); 

Ни один из них не является 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, eg: * 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 echo ucwords(strtolower('Dhaka, JAMALPUR, sarishabari')) ?> 

результат: Dhaka, Jamalpur, Sarishabari

Используйте эту встроенную функцию:

 ucwords('string'); 

Я не верю, что будет один хороший ответ, который охватывает все сценарии для вас. Форум 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])([az])/e","processReplacement('$1', '$2')", $name); var_dump($name); // output "Bob O'Conner" 

Возможно, шаблон регулярного выражения может быть улучшен, но я сделал следующее:

  • $1 – либо начало строки, либо любой неалфавитный символ.
  • $2 – любой строчный алфавитный символ

Затем мы заменяем оба из них результатом простой функции processReplacement() .

Если у вас PHP 5.3, то, вероятно, стоит сделать processReplacement() анонимной функцией.

Это немного более простой и более прямой ответ на главный вопрос. функция ниже подражает подходам PHP. На всякий случай, если PHP расширит это с помощью своих пространств имен в будущем, сначала проверяется тест. Im использую это доказательство воды для всех языков в моих установках 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; } } 

/ Лундман

Сначала преобразуйте в заголовок, затем найдите первый апостроф и запишите символ NEXT. Вам нужно будет добавить много проверок, чтобы убедиться, что после апострофа есть символ, и этот код будет работать только на одном апострофе. например, «Мэри О'Каллахан О'коннелл».

 $str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8"); $pos = strpos($str, "'"); if ($pos != FALSE) { $str[$pos+1] = strtoupper($str[$pos+1]); } 

используйте как ucfirst(strtolower($var));