Bonjour à tous,
Je viens de finir d'écrire une fonction pour formater les prénoms dans un formulaire d'inscription. Pas grand chose me direz vous, et pourtant j'y ai passé plus de temps que prévu.
Ma fonction fait exactement ce que je voulais, c'est à dire:
- Supprimer les espaces avant la première lettre et après la dernière lettre.
- Passer toutes les lettres en minuscules (y compris celles avec des accents ou des lettres collées).
- Passer la première lettre de chaque mot en majuscule (y compris celles avec des accents ou des lettres collées).
Cette fonction prend en compte les noms composés comprenant un tiret de séparation (ex : Jean-Marc) les prénoms multiples sans tiret de séparation (ex : Philippe Louis Jean) et les prénoms avec accents exotiques ou des lettres collées (ex : Lætitia Gaëlle).
Je veux même que cette fonction gère la combinaison de toutes ces particularités pour des prénoms totalement improbables (ex : GæñDrïn Œdêÿ Làn-Çûrs) au cas où des elfes utilisent ce formulaire.
Je voudrais donc vous soumettre mon code pour que vous me disiez si je peux l'améliorer :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 function format_prenom($string) { $string = trim($string); $bloc = explode(" ",$string); if(count($bloc)>1) { for($a=0;$a<=(count($bloc)-1);$a++) { $bloc[$a] = mb_strtolower($bloc[$a]); $bloc[$a] = trim($bloc[$a]); $sousBloc = explode("-",$bloc[$a]); if(count($sousBloc)>1) { for($u=0;$u<=(count($sousBloc)-1);$u++) { $sousBloc[$u] = trim($sousBloc[$u]); $upToLow = strtr($sousBloc[$u],'','ÿ'); if((isset($upToLow[0])) && (!empty($upToLow[0]))) { $first_lowToUp = strtoupper($upToLow[0]); $first_lowToUpSpec = strtr($first_lowToUp,'áàâäãåçéèêëíìîïñóòôöõúùûüýÿæ','ÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝÆ'); $permute = substr_replace($upToLow,$first_lowToUpSpec,0,1 ); $sousBloc[$u] = $permute; } } $agglo = implode("-",$sousBloc); $bloc[$a] = $agglo; } else { $upToLow = strtr($bloc[$a],'','ÿ'); if((isset($upToLow[0])) && (!empty($upToLow[0]))) { $first_lowToUp = strtoupper($upToLow[0]); $first_lowToUpSpec = strtr($first_lowToUp,'áàâäãåçéèêëíìîïñóòôöõúùûüýÿæ','ÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝÆ'); $permute = substr_replace($upToLow,$first_lowToUpSpec,0,1 ); $bloc[$a] = $permute; } } } $final = implode(" ",$bloc); } else { $bloc = trim($bloc[0]); $caracMin = mb_strtolower($string); $upToLow = strtr($caracMin,'','ÿ'); $first_lowToUp = strtr($upToLow[0],'áàâäãåçéèêëíìîïñóòôöõúùûüýÿæ','ÁÀÂÄÃÅÇÉÈÊËÍÌÎÏÑÓÒÔÖÕÚÙÛÜÝÆ'); $final = substr_replace($upToLow,$first_lowToUp,0,1 ); } return $final; }
Pour tester cette fonction je propose :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $string = " gæñDrïn dêÿ-fiLmIn LàN-çÛrS "; $fp = format_prenom($string); echo $fp;
Je précise que les prénoms passent avant par une fonction de vérification qui refuse tous les caractères numériques et spéciaux autres que ceux présent dans un tableau des caractères valides.
Voilà, merci à l'avance pour vos commentaires constructifs.
Cordialement.
Partager