Avatar billede kgp43 Nybegynder
27. oktober 2005 - 15:20 Der er 3 kommentarer og
1 løsning

Check om antal passer

Hejsa,

Jeg er ved at lave et BB Code script, men mangler en måde at sikre mig at alle "start quotes" bliver lukket, inden jeg erstatter med normal html kode.

Havde tænkte mig noget lignende.

if(antallet af startquotes != antallet slut quotes) {

  echo "error";
}

hvordan gør man lige det? skal vel have noget kode der tæller antal af start og slut quotes (, i $tekst.
Avatar billede plx Nybegynder
27. oktober 2005 - 16:11 #1
Prøv dette script. $validateTags_open_only_tags hvis du har nogle tags, som ikke behøver afslutning. Det giver også false, hvis de ikke lukkes i den rigtige rækkefølge.

Det er tilladt med argumenter til tagget, f.eks.
[img src=""][/img]


$validateTags_open_only_tags = array("openOnlyTag");
$validateTags_stack = array();

function ValidateTags_Callback($tag){
    global $validateTags_stack, $validateTags_open_only_tags;
    if($tag[0] == "/"){
        // afslutter tag
        $cnt = count($validateTags_stack);
        if($cnt){
            // er sidst-push'ede tag det samme som dette afsluttende tag?
            // og kun hvis ja, fjernes det
            if("/".$validateTags_stack[$cnt-1] == $tag){
                array_pop($validateTags_stack);
            }
        }

    }else{
        // nyt tag
        if(!in_array(strtolower($tag), $validateTags_open_only_tags)){
            array_push($validateTags_stack, $tag);
        }
    }
}

function ValidateTags($str){
    global $validateTags_stack;
    $validateTags_stack = array();
    preg_replace("/\[([^\s\]]+)/ie", "ValidateTags_Callback('$1')", $str);
    return count($validateTags_stack) == 0 ? true : false;
}


if(!ValidateTags($tekst)){
    echo "error";
}

<?php


$validateTags_open_only_tags = array("test");
$validateTags_stack = array();

function ValidateTags_Callback($tag){
    global $validateTags_stack, $validateTags_open_only_tags;
    if($tag[0] == "/"){
        // afslutter tag
        $cnt = count($validateTags_stack);
        if($cnt){
            // er sidst-push'ede tag det samme som dette afsluttende tag?
            // og kun hvis ja, fjernes det
            if("/".$validateTags_stack[$cnt-1] == $tag){
                array_pop($validateTags_stack);
            }
        }

    }else{
        // nyt tag
        if(!in_array(strtolower($tag), $validateTags_open_only_tags)){
            array_push($validateTags_stack, $tag);
        }
    }
}

function ValidateTags($str){
    global $validateTags_stack;
    $validateTags_stack = array();
    preg_replace("/\[([^\s\]]+)/ie", "ValidateTags_Callback('$1')", $str);
    return count($validateTags_stack) == 0 ? true : false;
}


$str = "hel [c] [b f]wtf [/b] [/c2] is this";

if(!ValidateTags($str)){
    echo "error";
}
Avatar billede plx Nybegynder
27. oktober 2005 - 16:12 #2
mine copy-paste skills er ikke hvad de har været
Avatar billede kgp43 Nybegynder
27. oktober 2005 - 17:02 #3
Dette ser ud til at virke efter hensigten:

<?
$text = "[b]A bunch of words that dont say anything special";

if(substr_count($text, '') != substr_count($text, '')) {

    echo "error
    ";
}
?>
Avatar billede kgp43 Nybegynder
01. november 2005 - 11:25 #4
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester