J'ai une variable qui contient les Prénom et le nom des mes utilisateurs, je voudrais isoler ces 2 données en sachant que le nom est toujours en majuscule, comment puis je faire ?
J'ai une variable qui contient les Prénom et le nom des mes utilisateurs, je voudrais isoler ces 2 données en sachant que le nom est toujours en majuscule, comment puis je faire ?
Une expression régulière et preg_match() pourraient le faire.
Comment utiliserais tu cette fonction, je comprends psa trop la ?
Une méthode "bourrin" :
Si tes chaines sont de la forme DUPONTalbert et stockées dans une variable $var :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $nom = ""; for($i=0; $i<strlen($var); $i++){ if(substr($var, $i, 1) == strtoupper(substr($var, $i, 1))) $nom .= substr($var, $i, 1); } $prenom = str_ireplace($nom, "", $var);
on va dire que ma chaine est de type = "Albert DUPONT" ???
Idem en remplacant dans ta boucle $i=0 par $i=1 et fais un trim au préalable pour être plus propre
EDIT :
et à la fin :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $prenom = trim(str_ireplace($nom, "", $var));
Et le prénom peut comporter des majuscules d'après ce que je vois ?J'ai une variable qui contient les Prénom et le nom des mes utilisateurs, je voudrais isoler ces 2 données en sachant que le nom est toujours en majuscule, comment puis je faire ?
cele me donne une erreur "Fatal error: Call to undefined function subtr()" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?php $nom = ""; $var = "Albert DUPONT"; for($i=1; $i<strlen($var); $i++){ if(substr($var, $i, 1) == strtoupper(substr($var, $i, 1))){ $nom .= subtr($var, $i, 1); } $prenom = trim(str_ireplace($nom, "", $var)); } ?>
merci cela fonctionne pour les personnes ayant un nom "simple", mais ne parche plus des que mes utilisateurs ont un prénom composée "jean Paul" ou un nom composé "De Winter"![]()
Tu as des noms composés de minuscules aussi (De Winter) ?
Quelle est l'étendue de tes cas possibles ?
Juste une question:
Entre le nom et le prénom, ya tjs un espace ?
Parceque sinon, là tu peux utiliser une regexp sur le nom (que des majuscules) avec avant un explode sur l'espace.
mais De Winter serait DE WINTER
et oui j'ai toujours un espace entre le prénom et le nom mais aussi tous ces cas :
Albert DUPONT
Jean Albert DUPONT
Albert DE DUPONT
Albert DA DUPONT
Albert DI DUPONT
Jean-Gerard DUPONT
Si tes noms sont toujours en majuscules alors faire un explode sur l'espace et regarder si les occurences ne contiennent que des majuscules si oui alors concaténer dans l'ordre des indices de ton tableau explode toutes ces occurences pour former ton nom
EDIT :
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 <?php $tab = array("Jean DUPONT", "Jean DI DUPONT"); for($i=0; $i<count($tab); $i++){ $nom = ""; $prenom = ""; $tmp = explode(" ", $tab[$i]); for($j=0; $j<count($tmp); $j++){ if($tmp[$j] == strtoupper($tmp[$j]) $nom .= $tmp[$j]." "; else $prenom .= $tmp[$j]." "; } $nom = rtrim($nom) $prenom = rtrim($prenom) } ?>
voilà (explode + regexp sur les majuscules).
Suis pas un pro des regexp mais un truc dans le genre sur chaque partie :
/^[A-Z]+[A-Z]*$/
Sinon, une autre façon de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?php $str = 'Albert DUPONT Jean Albert DUPONT Albert DE DUPONT Albert DA DUPONT Albert DI DUPONT Jean-Gerard DUPONT'; $reg = '/^([A-Z][a-z]+)((?: [A-Z]+)+)$/m'; preg_match_all($reg, $str, $m); print_r($m);
Bonjour s.n.a.f.u,
Tu peux m'expliquer la zone : (?: [A-Z]+) stp
merci
[A-Z]+ signifie une majuscule répétées au moins une fois
le motif (?: ) est une parenthèse non-capturante, pour économiser les perfs
Et mon motif était incomplet, il manquait le dernier bonhomme.
Celui-ci attrape tout le monde :
Code : 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 <?php $str = 'Albert DUPONT Jean Albert DUPONT Albert DE DUPONT Albert DA DUPONT Albert DI DUPONT Jean-Gerard DUPONT Foo DE-BAR snafu FUBAR Jean Charles FOOBAR Francois Xavier DI FOOBAR'; $reg = '/^((?:[A-Z]?[a-z- ]+)+)((?: [A-Z-]+)+)$/m'; preg_match_all($reg, $str, $m); print_r($m);
OUTCHHH, va falloir que je regarde celà de plus prèsle motif (?: ) est une parenthèse non-capturante, pour économiser les perfs
Merci bien, bonne journée
Partager