Remplacer des blocs {masculin/feminin} par masculin ou feminin

Résolu
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 - 19 oct. 2009 à 19:34
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 - 26 oct. 2009 à 09:24
Bonjour,

j'ai une chaîne de caractère genre "Bonjour {Monsieur/Madame}, ..."

je voudrais pouvoir, selon le sexe que je passe en paramètre, remplacer le bloc {Monsieur/Madame} soit par Monsieur soit par Madame. il peut y avoir plusieurs blocs de ce type avec des mots différents de chaque côté du "/" bien sûr.

j'ai fait un truc de ce genre

$title_array = str_split($this->title);
$title = '';
$male = '';
$female = '';
$sex_indicator = '';
foreach($title_array as $i){
switch($i){
case '{':
$sex_indicator = 'm';
break;
case '/':
if($sex){
$title.=$male;
}
$sex_indicator = 'f';
break;
case '}':
if(!$sex){
$title.=$female;
}
$sex_indicator = '';
$male = '';
$female = '';
break;
default:
switch($sex_indicator){
case 'm':
$male.=$i;
break;
case 'f':
$female.=$i;
break;
default:
$title.=$i;
break;
}
break;
} 
}


alors c'est sûr, sa marche, mais qu'est-ce que c'est crade ! vous auriez pas une petite solution qui fasse pas 20 lignes ?


Espérer le meilleur
Prévoir le pire

7 réponses

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
24 oct. 2009 à 01:33
Ah, j'avais pas testé avec plusieurs. Il y a une petite modification à faire pour que ça fonctionne bien dans l'expression régulière.

<?php
$sexe = 'm';
$txt = 'Je suis {un/une} {homme/femme}';
if ($sexe == 'm') {
    $txt = preg_replace('/\{(.*?)\/(.*?)\}/', '$1', $txt);
} else {
    $txt = preg_replace('/\{(.*?)\/(.*?)\}/', '$2', $txt);
}
echo $txt;
?>
3
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
19 oct. 2009 à 20:05
Tu peux toujours utiliser la fonction preg_replace pour faire ce genre de truc. C'est assez simple, il faut juste bien construire son expression régulière.

Pour le premier élément dans les accolades, utilise $1 comme paramètre de remplacement et $2 pour le deuxième :

preg_replace('/\{(.*)\/(.*)\}/', '$1', $tonTexte); OU
preg_replace('/\{(.*)\/(.*)\}/', '$2', $tonTexte);
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
20 oct. 2009 à 11:32
Mais je sais pas à l'avance par quoi remplacer le texte, en fait je ne sais pas du tout ce qu'il y a entre les { }, je sais uniquement le sexe


Espérer le meilleur
Prévoir le pire
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
23 oct. 2009 à 15:00
C'est justement ça que je t'ai proposé ...

<?php
$tonTexte = 'Ton texte ici ...';
if ($sexe == 'masculin') {
    $tonTexte = preg_replace('/\{(.*)\/(.*)\}/', '$1', $tonTexte);
} else {
    $tonTexte = preg_replace('/\{(.*)\/(.*)\}/', '$2', $tonTexte);
}
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
23 oct. 2009 à 15:08
Ah ok,

sa marche presque, j'aurais besoin d'une légère modif si sa te dérange pas : en fait dans les blocs {M/F}, l'une des deux parties peut etre vide

exemple : "je suis un{/e} {homme/femme}"

j'ai essayais avec ton code, et le premier bloc pose problème, dans le cas feminin il m'affiche "Je suis unfemme" et dans le cas masculin il m'affiche "Je suis un/e} {homme"

Merci d'avance


Espérer le meilleur
Prévoir le pire
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
23 oct. 2009 à 17:50
En fait sa marche pas des masses :
<?php
$sexe = 'm';
$txt = 'Je suis {un/une} {homme/femme}';
if ($sexe == 'm') {
    $txt = preg_replace('/\{(.*)\/(.*)\}/', '$1', $txt);
} else {
    $txt = preg_replace('/\{(.*)\/(.*)\}/', '$2', $txt);
}
echo $txt;
?>


Avec sexe =='m' sa me donne : "Je suis un/une} {homme"
Avec sexe =='f' sa me donne : "Je suis femme"


Espérer le meilleur
Prévoir le pire
0
DarkCid Messages postés 195 Date d'inscription mardi 22 février 2005 Statut Membre Dernière intervention 26 octobre 2009 1
26 oct. 2009 à 09:24
Cool merci, sa marche au poil !


Espérer le meilleur
Prévoir le pire
0
Rejoignez-nous