Сделайте первую букву прописной, а остальные строчные в строке
все, Я пытаюсь вставить фамилию в базу данных. Я бы хотел, чтобы первая буква была заглавной для имени, и если у них есть две фамилии, то заглавные имена. Так, например, если кто-то входит:
marriedname maidenname
он преобразует это в Marriedname Maidenname и так далее, если есть более двух имен. Другой сценарий - это кто-то имеет Апостроф в своем имени, так что есть ли в любом случае, чтобы сделать это, если кто-то входит:
о'Коннелл
Это нужно будет преобразовать в O'Connell. Я использовал:
ucfirst(strtolower($last_name));
однако, как вы можете сказать, это не сработает для всех сценариев. Спасибо за любой совет!
10 ответов
это будет заглавной буквой всех первых букв слова и букв сразу после Апострофа. Все остальные буквы будут строчными. Это должно сработать для вас:
str_replace('\' ', '\'', ucwords(str_replace('\'', '\' ', strtolower($last_name))));
вы можете попробовать это за слово
<?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('', '')", $name);
var_dump($name); // output "Bob O'Conner"
возможно, шаблон regex может быть улучшен, но то, что я сделал, это:
-
- это либо начало строки или любой не алфавитный символ.
-
- это все строчные буквы
затем мы заменяем оба из них результатом простого
Это немного более простой и более прямой ответ на главный вопрос. функция ниже имитирует PHP-подходы. На всякий случай, если PHP расширит это со своими пространствами имен в будущем, сначала проверяется тест. Я использую это доказательство воды для любых языков в моих установках wordpress.
$str = mb_ucfirst($str, 'UTF-8', true);
это делает первую букву прописной и все остальные строчные буквы, как Q был. Если третий аргумент имеет значение 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;
}
}
/ Lundman
сначала преобразуйте в регистр заголовка, затем найдите первый апостроф и верхний регистр следующего символа. Вам нужно будет добавить много проверок, чтобы убедиться, что после Апострофа Есть символ, и этот код будет работать только на одном Апострофе. например, "Мэри О''Callahan О'Коннелл".
$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;
Result = Это Какой-То Текст
вы можете использовать один код строки для этого с ucwords(strtolower($text));