Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

regex pour verifier la conformite d'une balise

6 réponses
Avatar
Steph. k.
Bonjour tout le monde,

Je suis en train de monter un script pour valider au niveau
accessibilité des pages html. Je récupère l'url en argument et je
parcoure le fichier ligne par ligne.
Pour ce script j'aurais besoin d'une expression régulière afin de
déterminer si une ligne contient une balise <frame> ou <frameset> sans
attribut title="..." ou avec un attribut title vide.
Pour l'instant j'en suis là (en fait c'est surtout Yves de
http://expreg.com qui en est là ;-)) :
$ligne='ta ligne lue avec htmlentities....';
$motif='`^&lt;(frameset|frame)\s(.*)?(title=&quot;\w+&quot;)(.*)?&gt;$`'
;
if(!preg_match($motif,$ligne)){
echo 'pas bon... blabla...';
}
else
{
echo 'ce que tu veux';
}
Cette regex détecte si une ligne contient une balise <frame> ou
<frameset> conforme et non pas une balise présente mais non conforme. De
plus l'idéal serait que la regex traite de la même façon les atributs
entourés de " (title="...") que ceux entourés de '(title='...').

Par avance merci,

--
Steph. K.
http://www.acces-pour-tous.net
Quand il pleut des roubles,
les malchanceux n'ont pas de sac. Coluche

6 réponses

Avatar
Guillaume Bouchard
Steph. k. wrote:


Je suis en train de monter un script pour valider au niveau
accessibilité des pages html.
Pour ce script j'aurais besoin d'une expression régulière afin de
déterminer si une ligne contient une balise <frame> ou <frameset> sans
attribut title="..." ou avec un attribut title vide.


Une page qui contient une balise frame n'est pas accesible au sens ou je
l'entend... Mais bon.

Au depart j'etais parti pour faire cette regex, mais je n'ai pas de quoi
tester et comme elle est plutot complex je vais m'abstenir de donner un
truc completement faux.

--
Guillaume.

Avatar
Steph. k.
Guillaume Bouchard wrote:
[...]
Au depart j'etais parti pour faire cette regex, mais je n'ai pas de
quoi tester et comme elle est plutot complex je vais m'abstenir de
donner un truc completement faux.


Afin de simplifier un peu la tâche des gens prêts à m'aider, j'ai mis en
place une page de test :
http://www.acces-pour-tous.net/verif.php
Avec l'exemple mis en ligne, la regex idéale ne ferait apparaitre en
gras que la ligne 8.

Code de la page verif.php :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="FR">
<head>
<meta http-equiv="content-type" content="text/html;
charset=iso-8859-15">
<title>Validez votre site ver. formulaire</title>
</head>
<body>
<?php
if($_POST[urlAVerif]==''){
echo "<form name="langdecla" action="verif.php" method="POST">";
echo "<h2>URL de la page : </h2>";
echo "<p>";
echo "<input type="text" id="urlAVerif" name="urlAVerif"
size="60" value="http://www.acces-pour-tous.net/frame.htm">";
echo "</p>";
echo "<h2>regex à tester : (exemple : `[^/|no]frame` )</h2>";
echo "<input type="text" id="reg" name="reg" size="60"
value="`[^/|no]frame`">";
echo "<p>";
echo "<input type="submit" name="Submit" value="Soumettre">";
echo "</p>";
echo "</form>";
}
else{
echo "<h1>$_POST[urlAVerif]</h1>";
echo "Voici le code source de la page :<br><br>";
$i=0;
$fp=fopen("$_POST[urlAVerif]","r");
$motif=$_POST['reg'];
echo "<p>$motif</p>";
while(!feof($fp)){
$i++;
$ligne = fgets($fp, 4096);
$ligne=htmlentities($ligne);
if(preg_match($motif,$ligne)){
echo "$i <strong>&nbsp;&nbsp;&nbsp; $ligne</strong>rn<nobr><br />";
}
else{
echo "$i &nbsp;&nbsp;&nbsp; $lignern<nobr><br />";
}
}
fclose($fp);
}
?>
</body>
</html>

--
Steph. K.
http://www.acces-pour-tous.net

Avatar
Steph. k.
Rectification :
à la place de :
Avec l'exemple mis en ligne, la regex idéale ne ferait apparaitre en
gras que la ligne 8.il faut lire :
Avec l'exemple mis en ligne, la regex idéale ne ferait apparaitre en
gras que les lignes 7, 9, 10 et 11.

--
Steph. fatigué
Avatar
Guillaume Bouchard
Ce soir j'install php et je fais cette regex ( ou ce code php.. peut
etre que en 3 lignes se sera plus simple :) )
Mais par contre, explique moi pourquoi tu veut faire des frames
accesibles alors que les frames ne sont pas accesibles par definitions ?

--
Guillaume.
Avatar
Olivier Miakinen

Je suis en train de monter un script pour valider au niveau
accessibilité des pages html. Je récupère l'url en argument et je
parcoure le fichier ligne par ligne.
Pour ce script j'aurais besoin d'une expression régulière afin de
déterminer si une ligne contient une balise <frame> ou <frameset> sans
attribut title="..." ou avec un attribut title vide.


Question : tu as déjà fait un pré-parsing pour que ta ligne contienne
une entité et une seule ?

Par exemple, si le code contient ceci :

<frameset bla><frame bli
blu><frame blo><frame blou>

Tu dois avoir 4 lignes :

"<frameset bla>"

"<frame bli
blu>"

"<frame blo>"

"<frame blou>"

C'est bien ça ?



Si la réponse est oui, ceci devrait marcher (non testé) :

$motif1 = '<frame(set)?s';
$tquote = "'[^']+'"; /* title='xxx' */
$tguill = '"[^"]+"'; /* title="xxx" */
$motif2 = 's' . "title=($tquot|$tguill)";

if (preg_match($motif1,$ligne) && !preg_match($motif2,$ligne)) {
echo 'frame ou frameset sans title valide';
} else {
echo 'soit ce n'est pas une frame, soit le title y est';
}



Si la réponse était non, alors il faudra faire des choses plus complexes.

Avatar
Steph. k.
Guillaume Bouchard wrote:
Ce soir j'install php et je fais cette regex ( ou ce code php.. peut
etre que en 3 lignes se sera plus simple :) )
Mais par contre, explique moi pourquoi tu veut faire des frames
accesibles alors que les frames ne sont pas accesibles par
definitions ?


Merci de te pencher sur mon problème,

Je ne veux pas faire des frames accessibles, je veux faire un validateur
d'accessibilité. Je veux qu'en passant une url en argument à mon script
celui-ci détecte les erreurs du fichier, notamment les frames sans
attribut title.
Au final, le résultat devrait ressembler à ca :
http://minilien.com/?6cBT7hwA7m
Avec les avertissements en français et les liens qui renvoient vers les
fiches d'acces-pour-tous.net. Comme cela même ceux qui ne parlent ni
l'anglais ni le w3c n'auront plus d'excuses :-)

--
Steph. K.
http://www.acces-pour-tous.net
Une méthode fixe n'est pas une méthode.
Proverbe chinois