Tom's Guide > Forum > Programmation > Vérification Regex

Vérification Regex

Forum Programmation : Vérification Regex

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour,

Je me suis fait un petit Regex, mais il ne marche pas...

Code :
  1. #((align=\"right|left|center\" )?|(cellspacing=\"[0-3]?\" )?|(border=\"[0-3]?\" )?)#i



Voila, j'espère que vous verez le problème et merci.


Message édité par St3fff le 13-05-2007 à 16:06:17
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Bonjour,
Elle doit servir à quoi ta regexp?

Répondre à Halike

Il sert à afficher :

align="left ou right ou center" ou cellspacing="chiffre entre 0 et 3" ou border="chiffre entre 0 et 3"

S'achant que align, cellspacing, border peuvent être affiché les trois en même temps.

Répondre à St3fff

OK,
et tu as un exemple de chaine à traiter avec cette regexp?
[edit]Aussi, pourquoi tu échappes tes guillemets?


Message édité par Halike le 13-05-2007 à 19:00:10
Répondre à Halike

La voici :

Code :
  1. <table align="left" cellspacing="1" border="0">

Répondre à St3fff

Pour les guillemets, euh ?

Je veux qu'il s'affiche.


Message édité par St3fff le 13-05-2007 à 19:03:12
Répondre à St3fff

J'ai encore des questions...
(je suis long à la détente, mais on devrait y arriver ;) ).

1)Les arguments align,cellspacing et border sont toujours présents, ou il peut arriver qu'un (ou plusieurs) soit absent?
2)Tu veux réupérer quoi exactement? La valeur de chaque attribut présent?(un exemple sur la chaine que tu as donné serait le bienvenu).

Avec ca, mon pauvre cerveau devrait en avoir assez :)

Répondre à Halike

Ca fait rien je sais que c'est assez compliquer et qu'il faut comprendre...
C'est déjà simpa ;)

Bon alors :

1/ Il peut y avoir soit 0,1,2,3 arguments.

2/ Je veux récupérer la totalitée de l'argument.

Un exemple :

<table align="left" cellspacing="1" border="0">

Je veux récupérer ceci: "align="left" cellspacing="1" border="0"".

Mais je ne veux pas qu'on puisse mettre autre chose que align, cellspacing, border.

J'espère avoir été claire :D, et merci !

Répondre à St3fff

Tu as surchauffé ?

Je déconne ;)

Répondre à St3fff

Citation :

Tu as surchauffé ?


En gros, oui ;)
Je pense que pour faire ca avec seulement des regexp,c'est faisable,mais ca dépasse mes compétences...
La bonne nouvelle, c'est que tu dois t'en sortir avec ca:

<?php
$var='<table align="left" cellspacing="1" border="2">'; //à adapter en fonction de ton script
$regexp2='#<table([^>]*)>#i'; //ca va récupérer tout les arguments de la balise table
$regexp3='#^([^=]+)="([^"]+)"$#'; //c'est pour apres, ca sépare attribut et valeur quand ils sont sous la forme attribut="valeur"
preg_match($regexp2,$var,$output);
echo "\n<br>";
$tableau_attributs=explode(' ',$output[1]);//j'explose lachaine retournée pour récupérer un tableau dont les éléments sont de la forme atribut="valeur"
$le_tableau_est_ok=true; //cette variable va etre vrai si les arguments satisfont les conditions
foreach($tableau_attributs as $valeur)
{

if ($valeur!='') //ca peut etre vide (notament si il n'y a aucun attribut je crois)
{
preg_match($regexp3,$valeur,$output);
//dans $output[1], onrécupere l' attribut (align,cellspacing,...) et dans $output[2], la valeur associée
echo '<b>'.$output[1].'</b>:'.$output[2].'<br>';
switch($output[1])//en fonction de l'attribut, on vérifie si sa valeur est conforme
{
case 'align':
if ($output[2]=!'right' OR $output[2]=!'left' OR $output[2]=!'center') //ce sont les seules valeurs autorisées
{
$le_tableau_est_ok=false;
}
break;
case 'cellspacing':
if ($output[2]<0 OR $output[2]>3)
{
$le_tableau_est_ok=false;
}
break;
case 'border':
if ($output[2]<0 OR $output[2]>3)
{
$le_tableau_est_ok=false;
}
break;
default:
$le_tableau_est_ok=false; //on est dans ce cas si l'argument n'est ni align,ni cellspacing, ni border
break;
}
}
}
//a ce stade, la variable $le_tableau_est_ok vaut true si et seulement si le tableau est de la forme désirée
if($le_tableau_est_ok) {echo 'OK';} //adapte en fonction de ton script

?>



Je tiens quand même à préciser que je ne suis pas un gourou en php, donc il est possible (et probable :) )que j'ai fait des erreurs.
Par contre, je répondrai sans hésiter à tes questions concernant ce bout ce code.

Bon courage ;)

Répondre à Halike

Bin merci, je vais un peu modifier tout ca, et je te dit !

Par contre dans ton regex, que veux dire le "=" et ">".

Répondre à St3fff

Et bien en fait, avec la premiere regexp, on récupere tout ce qu'il y a entre <table et > (pour la variable d'exemple, ca donne [align="left" cellspacing="1" border="2"]- sans les crochets bien sur).
Pour faire ca, on récupere tous les caracteres apres la chaine "<table" qui ne sont pas >, d'ou le [^>] dans la regexp.

Ensuite, on "explose" la chaine ainsi récupérée, pour obtenir un tableau dont les éléments sont du genre attribut="valeur" (pour notre exemple, ca donne 3 éléments:[align="left"],[cellspacing="1"], et [border="2"] )
A l'aide de la 2° regexp (qui s'appelle regexp3, ne me demande pas pourquoi :) ), on récupere d'un coté l'attribut, et de l'autre la valeur, pour chaque élément du tableau (on parcours le tableau avec foreach).
Pour récupérer l'attribut, on parcourt la chaine depuis le debut (d'ou le ^ du debut de la regexp), jusqu'a ce qu'on rencontre le signe = (d'ou le [^=] :n'importe quel caractere sauf = ). Ensuite, c'est un guillemet, puis on récupere tous les caracteres jusqu'au prochain guillemet (d'ou le [^"] :n'importe quel caractere sauf " )
Une fois qu'on a attribut et valeur, on avise (c'est a ca que sert la condition switch).

D'autres questions?

Répondre à Halike

Par contre il y a propoblème, car moi je veux qu'il y est 1,2,3 attributs.
Et donc l'utilisateur pourra ajouté du code personnelle avec ton regex.
Il peut fermer la balise, et en ouvrire une autre...

Mon regex au depart, n'est t'il pas bon ? Pourrait on le corrigé ?

C'est super simpa de t'impliquer auttant dans mon problème !



Répondre à St3fff
Tom's Guide > Forum > Programmation > Vérification Regex
Aller à :

Il y a 2148 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens