Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/10/2007, 12h37   #1
Membre confirmé
 
Thomas Gambier
Inscription : avril 2005
Messages : 807
Détails du profil
Informations personnelles :
Nom : Thomas Gambier
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : avril 2005
Messages : 807
Points : 243
Points : 243
Par défaut [PHP-JS] Trouver une chaine de caractères

Bonjour,

Je cherche a faire une fonction qui cherche une position top et left d'un objet pour pouvoir y enlever respectivement 110 et 120 px.

En gros Ma chaine de caractère en entrée:
Code :
1
2
$chaine="<DIV id=boxHandle1 style="LEFT: 161px; WIDTH: 250px; POSITION: absolute; TOP: 140px; HEIGHT: 123px; BACKGROUND-COLOR: #66cc66"></DIV>";
Et je veux que ma chaine en sortie soit comme ca:
Code :
1
2
$chaine="<DIV id=boxHandle1 style="LEFT: 41px; WIDTH: 250px; POSITION: absolute; TOP: 30px; HEIGHT: 123px; BACKGROUND-COLOR: #66cc66"></DIV>";
Comment faire?
calitom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 12h46   #2
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
salut,
as-tu vraiment besoin de le faire coté serveur?
Sinon tu peux le faire assez facilement en javascript
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 12h48   #3
Membre confirmé
 
Thomas Gambier
Inscription : avril 2005
Messages : 807
Détails du profil
Informations personnelles :
Nom : Thomas Gambier
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : avril 2005
Messages : 807
Points : 243
Points : 243
Oui malheuresement je suis obligé de le faire côté serveur, ce qui je l'avoue ne m'arrange pas!!
calitom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 13h13   #4
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
bon j'ai une proposition. Un peu lourd peut être?!!
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$chaine = '<DIV id=boxHandle1 style="LEFT: 161px; WIDTH: 250px; POSITION: absolute; TOP: 140px; HEIGHT: 123px; BACKGROUND-COLOR: #66cc66"></DIV>';
$tab = explode(';',$chaine);
print_r($tab);
 
$left = explode(' ',$tab[0]);
$leftPx = substr($left[3],0,3);
$left[3] = ($leftPx - 120).'px';
$tab[0] = implode(' ',$left);
 
 
$top = explode(' ',$tab[3]);
$topPx = substr($top[2],0,3);
$top[2] = ($topPx - 110).'px';
$tab[3] = implode(' ',$top);
 
echo implode(';',$tab);
?>
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 14h22   #5
Membre confirmé
 
Thomas Gambier
Inscription : avril 2005
Messages : 807
Détails du profil
Informations personnelles :
Nom : Thomas Gambier
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : avril 2005
Messages : 807
Points : 243
Points : 243
C'est bien, mais il se peut qu'il y ait plusieurs div à la suite...
C'est là ou est la difficulté...
Peut être en cherchant la chaine left:...px; ?
calitom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 18h13   #6
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
en expression régulière.... on peut effectivement arriver à un truc plus élégant, mais le code ci-dessous ne fonctionne qu'à moitié !
le replace se fait de manière litérale, la soustraction ne se fait pas...

Code php :
1
2
3
4
5
6
7
8
9
10
11
<?php
$chaine = 'DIV id=boxHandle1 style="LEFT: 161px; WIDTH: 250px; POSITION: absolute; TOP: 140px; HEIGHT: 123px; BACKGROUND-COLOR: #66cc66"></DIV>';
 
$pattern[0] = '/(?<=LEFT\:)(.*)\d(?=px; WIDTH)/';
$pattern[1] = '/(?<=TOP\:)(.*)\d(?=px; HEIGHT)/';
$replace[0] = '$0-120';
$replace[1] = '$0-110';
echo preg_replace($pattern,$replace,$chaine);
 
 
?>

Code php :
1
2
//affiche
DIV id=boxHandle1 style="LEFT: 161-120px; WIDTH: 250px; POSITION: absolute; TOP: 140-110px; HEIGHT: 123px; BACKGROUND-COLOR: #66cc66">

à voir si un guru des expressions régulière saurait nous donner un petit coup de pouce
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2007, 19h18   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Ce serait possible avec les expressions régulières mais ici je ne suis pas certain que c'est ce qu'il y a de plus fiable :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$chaine = 'DIV id=boxHandle1 style="LEFT: 161px; WIDTH: 250px; POSITION: absolute; TOP: 140px; HEIGHT: 123px; BACKGROUND-COLOR: #66cc66"></DIV>';
 
$pattern = array(
    '/(?<=\bLEFT:)\s*(\d+)\s*(?=px;)/ei',
    '/(?<=\bTOP:)\s*(\d+)\s*(?=px;)/ei'
);
$replace = array(
    '\1 - 120',
    '\1 - 110'
);
echo preg_replace($pattern, $replace, $chaine);
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h01.


 
 
 
 
Partenaires

Hébergement Web