Tous, je m'efforce d'insérer un nom de famille dans une base de données. Je voudrais que la première lettre soit en majuscule pour le nom et s’ils ont utilisé deux noms de famille, en majuscule les premier et deuxième noms Ainsi, par exemple, si quelqu'un entre:
nom marie maidenname
Cela le convertirait en nom de famille Maidenname et ainsi de suite s'il y a plus de deux noms. L'autre scénario est que quelqu'un a une apostrophe dans son nom, est-il donc possible de le faire si quelqu'un entre:
o'Connell
Cela aurait besoin de convertir en O'Connell. J'utilisais:
ucfirst(strtolower($last_name));
Cependant, comme vous pouvez le constater, cela ne fonctionnerait pas pour tous les scénarios. Merci pour tout conseil!
Cela mettra en majuscule toutes les premières lettres de Word et les lettres immédiatement après une apostrophe. Toutes les autres lettres seront en minuscule. Il devrait fonctionner pour vous:
str_replace('\' ', '\'', ucwords(str_replace('\'', '\' ', strtolower($last_name))));
vous pouvez essayer ceci pour Word
<?php echo ucwords(strtolower('Dhaka, JAMALPUR, sarishabari')) ?>
le résultat est: Dhaka, Jamalpur, Sarishabari
Aucune d'entre elles n'est compatible avec UTF8, alors voici celle qui fonctionne parfaitement
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;
}
Usage:
$s = 'SÃO JOÃO DOS SANTOS';
$v = titleCase($s); // 'São João dos Santos'
Utilisez cette fonction intégrée:
ucwords('string');
Je ne crois pas qu'il y aura une bonne réponse qui couvre tous les scénarios pour vous. Le forum PHP.net pour ucwords
a pas mal de discussions, mais aucune ne semble avoir de réponse pour tous. Je recommanderais que vous normalisiez l'utilisation de majuscules ou de laisser la saisie de l'utilisateur seule.
Vous pouvez utiliser preg_replace
avec l'indicateur e
(exécuter une fonction 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"
Peut-être que le motif de regex pourrait être amélioré, mais ce que j'ai fait est:
$1
est le début de la ligne ou tout caractère non alphabétique.$2
est un caractère alphabétique minusculeNous remplaçons ensuite les deux par le résultat de la fonction processReplacement()
simple.
Si vous avez PHP 5.3, cela vaut probablement la peine de faire de processReplacement()
une fonction anonyme.
C'est une réponse un peu plus simple et plus directe à la question principale. la fonction ci-dessous imite les approches PHP. Juste au cas où si PHP étendait cela avec leurs espaces de noms à l'avenir, un test est d'abord vérifié. J'utilise cette preuve de l'eau pour toutes les langues dans mes installations wordpress.
$str = mb_ucfirst($str, 'UTF-8', true);
Cela met la première lettre en majuscule et toutes les autres minuscules comme le Q l'était. Si le troisième argument est défini sur false (valeur par défaut), le reste de la chaîne n'est pas manipulé.
// 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
utiliser comme ceci ucfirst(strtolower($var));
Vous pouvez utiliser les fonctions strtolower
et ucwords
en PHP.
Premièrement: réduisez tout le texte saisi en utilisant strtolower('inputtedtext') then capitalise all text using
ucwords ('strtolower') `.
Échantillon :
$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;
Résultat = Ceci est du texte
Vous pouvez utiliser un code de ligne pour cela avec ucwords(strtolower($text));
Commencez par convertir en titre, puis recherchez la première apostrophe et mettez en majuscule le caractère NEXT. Vous devrez ajouter de nombreux contrôles pour vous assurer qu'il y a un caractère après l'apostrophe et que ce code ne fonctionnera que sur une seule apostrophe. par exemple. "Mary O'Callahan O'connell".
$str = mb_convert_case($str, MB_CASE_TITLE, "UTF-8");
$pos = strpos($str, "'");
if ($pos != FALSE)
{
$str[$pos+1] = strtoupper($str[$pos+1]);
}