1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <?php
function formatage_nom_de_famille( $chaine )
{
$chaine = trim( $chaine );
if( !empty( $chaine ) ){
$chaine = ' '.$chaine.' '; // On ajoute des espaces avant et après
// -----------------
// 1/ spécial : L' ou D'
$pattern = '/( [ld])[\']/i';
$chaine = preg_replace($pattern, ' $0§ ', $chaine);
// -----------------
// 2/ tout en minuscules + première lettre de tous les mots en majuscule
$chaine = mb_convert_case($chaine, MB_CASE_TITLE, "UTF-8");
// -----------------
// 3/ chiffres romains : en majuscules (II, III, IV, VIII, IX,...)
$chaine = str_replace(array(' ','-','/'), array(' §§ ',' §-§ ',' §/§ '), $chaine);
// au début : un espace ; à la fin : [\W^\'] <-> [^A-Za-z0-9^\'] (tout sauf alphanumérique ou apostrophe)
$pattern = '/ (M{0,4}(CM|CD|D?C{0,4})(XC|XL|L?X{0,4})(IX|IV|V?I{0,4})|[IDCXMLV])[\W^\']/i';
$chaine = preg_replace_callback($pattern, create_function(
'$matches', // guillemets simples importants (ou il faut protéger les caractères $ avec \$)
'return strtoupper($matches[0]);' // en majuscules
), $chaine);
$chaine = str_replace(array(' §§ ',' §-§ ',' §/§ '), array(' ','-','/'), $chaine);
// -----------------
// 4/ articles : en minuscule (le/la/les/de/du/des/l'/d')
$NON_array = array(' Et ', ' Le ', ' La ', ' Les ', ' De ', ' Du ', ' Des ', ' L\'§ ', ' L§ ', ' D\'§ ', ' D§ ');
$OUI_array = array(' et ', ' le ', ' la ', ' les ', ' de ', ' du ', ' des ', ' l\'', ' l\'', ' d\'', ' d\'');
$chaine = str_replace($NON_array, $OUI_array, $chaine);
// -----------------
$chaine = trim($chaine);
$chaine = str_replace(' ', ' ', $chaine);
// -----------------
// 1ère lettre toujours en Majuscule
// $chaine = ucfirst($chaine);
}
return $chaine;
}; |
Partager