Avatar billede andersdp Nybegynder
15. september 2004 - 16:38 Der er 5 kommentarer og
1 løsning

preg_match - Fange tegn der afviger de godkendte

Bruger eksempelvis dette til at validere en tekststreng:
---------------------------------
if (preg_match( "/^[a-zæøåA-ZÆØÅ\-\ ]{2,100}$/", $_POST['text']))
{
OK
}
else
{
Fejl.
}
---------------------------------

Kan jeg på en eller anden måde vise brugeren hvilke tegn de har brugt i teksten, som ikke er godkendt?
Hvis de nu har skrevet et 2-tal ind i teksten, kan jeg så fortælle dem at det er 2-tallet der er problemet? Altså dynamisk generere fejlmeldingerne...
Avatar billede coderdk Praktikant
15. september 2004 - 16:52 #1
Gør det omvendt ;)

if ( preg_match( "/([^a-zæøåA-ZÆØÅ\-\ ])/, $_POST['text'] ), $match )
{
  echo "Du må ikke bruge $match[1] i texten...";
}
else
{
  // Evt. yderligere check på længde osv
  echo "ok";
}
Avatar billede andersdp Nybegynder
15. september 2004 - 17:19 #2
Yes, det er der jeg vil henad :)

Hvordan løber jeg array'et igennem for alle fejl tegn? Lige nu tager den kun det første tegn og skriver ud...
Avatar billede andersdp Nybegynder
15. september 2004 - 17:44 #3
Det er vel også spørgsmålet om, hvordan man får smidt alle fejl tegnene i $match...
Avatar billede coderdk Praktikant
15. september 2004 - 18:02 #4
if ( preg_match_all( "/([^a-zæøåA-ZÆØÅ\-\ ])/, $_POST['text'] ), $match )

Prøv at lave en var_dump( $matches ) på det- evt. en array_unique på resultatet :)
Avatar billede coderdk Praktikant
15. september 2004 - 18:07 #5
Dette burde virke:

<?php

    $text = "larsæøøøøa111111123dfk54sd65fk2j^dd ^";

    if ( preg_match_all( "/([^a-zæøåA-ZÆØÅ\-\ ])/", $text , $match ) )
    {
        $nono = implode( "", array_unique( $match[1] ) );
        echo "Du må ikke bruge disse tegn: $nono";
    }
    else
    {
        // Evt. yderligere check på længde osv
        echo "ok";
    }

?>
Avatar billede andersdp Nybegynder
15. september 2004 - 18:29 #6
Jeps, der virker :)

Her er min kode:
----------------------------------------------
<?php
if (isset($_POST['memberzipcode']))
    {
    if (strlen($_POST['memberzipcode'])!=0) //if text length exceeds 1
        {
        if (preg_match_all("/([^0-9\-\ ])/", $_POST['memberzipcode'], $match)) //if text only cotains approved characters
        {
        $nono = implode(", ", array_unique($match[0]));
        echo '<script type=\'text/javascript\'>alert(\'Fejl i postnummer.\n\nDet angivne postnummer indeholder forbudte tegn:\n'.$nono.'\');</script>';
        }
        else if (strlen($_POST['memberzipcode'])!=4) //if text has certain length
        {
        echo '<script type=\'text/javascript\'>alert(\'Fejl i postnummer.\n\nEt postnummer består af 4 tal.\');</script>';
        }
        else if (strlen($_POST['memberzipcode'])>4) //if text length exceeds max length
        {
        echo '<script type=\'text/javascript\'>alert(\'Fejl i postnummer.\n\nLængden må ikke overstige 4 tegn.\');</script>';
        }
        else //if text contains non-approved characters
        {
        $count++;
        }
    }
    else //if length is zero, which is okay
    {
    $count++;
    }
}
?>
----------------------------------------------

Variablen count som tælles op når input'et valideres korrekt, bruger jeg til at kalde en funktion der udfører database kaldene... Hvis jeg f.eks. har 4 input felter der skal valideres, så skal count være lige 4 førend funktionen kaldes....

Tak for hjælpen coderdk :)
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