Vérification Regex
Dernière réponse : dans Programmation
Bonjour,
Je me suis fait un petit Regex, mais il ne marche pas...
Voila, j'espère que vous verez le problème et merci.
Je me suis fait un petit Regex, mais il ne marche pas...
#((align=\"right|left|center\")?|(cellspacing=\"[0-3]?\")?|(border=\"[0-3]?\")?)#i
Voila, j'espère que vous verez le problème et merci.
Autres pages sur : verification regex
Lassé par la pub ? Créez un compte
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
(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
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
, et merci !
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
, et merci ! 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
?>
$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
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?
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?
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 !
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 !
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumTable background image html
- ForumAide site internet avec web creator
- solutionsCreer un site internet avec dreamweaver
- solutionsScript popup javascript avec variables php
- ForumDownload programme changer index html index php
- ForumTableau html taille cellules
- ForumRecuperer largeur tableau html sous firefox
- ForumProbleme internet sur navigateur hors firefox
- ForumCellpadding, cellspacing
- ForumProbleme formulaire tables access 2007
- Voir plus