Remplacer des blocs {masculin/feminin} par masculin ou feminin [Résolu]

Messages postés
195
Date d'inscription
mardi 22 février 2005
Dernière intervention
26 octobre 2009
- - Dernière réponse : DarkCid
Messages postés
195
Date d'inscription
mardi 22 février 2005
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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
1051
Date d'inscription
lundi 7 mars 2005
Dernière intervention
13 juillet 2010
3
Merci
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;
?>

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Arto_8000
Messages postés
1051
Date d'inscription
lundi 7 mars 2005
Dernière intervention
13 juillet 2010
0
Merci
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);
Commenter la réponse de Arto_8000
Messages postés
195
Date d'inscription
mardi 22 février 2005
Dernière intervention
26 octobre 2009
0
Merci
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
Commenter la réponse de DarkCid
Messages postés
1051
Date d'inscription
lundi 7 mars 2005
Dernière intervention
13 juillet 2010
0
Merci
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);
}
?>
Commenter la réponse de Arto_8000
Messages postés
195
Date d'inscription
mardi 22 février 2005
Dernière intervention
26 octobre 2009
0
Merci
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
Commenter la réponse de DarkCid
Messages postés
195
Date d'inscription
mardi 22 février 2005
Dernière intervention
26 octobre 2009
0
Merci
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
Commenter la réponse de DarkCid
Messages postés
195
Date d'inscription
mardi 22 février 2005
Dernière intervention
26 octobre 2009
0
Merci
Cool merci, sa marche au poil !


Espérer le meilleur
Prévoir le pire
Commenter la réponse de DarkCid

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.