webForumDet fria alternativet

Negation och preg_replace

Webbutveckling

4 svar · 292 visningar · startad av henke

Medlem sedan dec. 1999286 inlägg
Frågan#1

Jag skulle vilja kontrollera om en img-tagg har en class eller inte. Finns ingen class ska ska class läggas till. Exempel:

<p><img width="120" height="200" class="alignLeft" alt="bild1.jpg" src="bild1.jpg" />Text...<br />
<img width="120" height="200" alt="bild2.jpg" src="bild2.jpg" /></p>

I den första img-taggen finns redan class="alignLeft" och där ska alltså ingen class läggas till. I andra taggen saknas class och därför ska class läggas till där.

Med hjälp av nedanstående kod ersätts class="alignLeft" med class="noAlign":

$text = "<p><img width=\"120\" height=\"200\" class=\"alignLeft\" alt=\"bild1.jpg\" src=\"bild1.jpg\" />Text...<br /><img width=\"120\" height=\"200\" alt=\"bild2.jpg\" src=\"bild2.jpg\" /></p>";
$pattern = "/<img(.*?)(class=\".*?\")(.*?)\/>/";
$replacement = "<img$1class=\"noAlign\"$3 />";
$text = preg_replace($pattern, $replacement, $text);

Men det är inte så som det ska fungera. Har försökt att lösa det genom att sätta en negation (m h a "^" och klammrar) på class i $pattern men får det inte att fungera korrekt. Hur ser det reguljära uttrycket ut som löser det här?

För det ska väl gå att lösa det här med ett reguljärt uttryck? Om inte, finns det något annat smidigt sätt att lösa det på?

Medlem sedan mars 2003429 inlägg
#2

Det första som slog mig som en sekundär lösning var att plocka ut de parametrarna i img taggen som är intressanta och sedan bara stoppa in dom i en ny tillsammans med classparametern oavsett om den fanns från början eller inte.
Är kass på reguljära uttryck tyvärr =/

Medlem sedan nov. 2000857 inlägg
#3

Flyttas från PHP..

Medlem sedan dec. 20025 483 inlägg
#4

Testa

/**/

preg_replace('/(<img)((?:\s+(?:height|width|src|title|border|style|alt|id|hspace|ismap|longdesc|usemap|vspace|title|lang|xml:lang|on[a-z]+)="[^"]*?")*?)((?:\s*\/)?>)/im','\\1\\2 class="noAlign"\\3', stripslashes($text));

/**/

Notera de ovälkomna blankstegen i hspace; de skall ej vara där.

Medlem sedan dec. 1999286 inlägg
#5

Peter S, mycket stort tack! :) (y)

269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)