WachaW: suchen nach einem Text im String

Hallo,

ich möchte einen String (Bildurl) auf Richtigkeit testen:

if($FORM{'NEWLINKBANNER'} !~ /http[a-zA-Z0-9_-.:/]gif/)
{
  falsch();
}
else
{
  richtig();
}

aber es funktioniert irgendwie nicht, aber warum ?
es soll zwischen http und gif (nichts davor und nichts danach) suchen.

Ich dreh bald durch (schon mit . * ? + \w etc. versucht und die ganze Selfhtml Seite durchgelesen - nichts.

Viele Grüße
WachaW

  1. N'abend,

    if($FORM{'NEWLINKBANNER'} !~ /http[a-zA-Z0-9_-.:/]gif/)

    Afaik kannst du einen RegEx nur mit "=~" anwenden, nicht mit "!=". Also etwa so (ohne Garantie):

    if ($FORM{'NEWLINKBANNER'} =~ /[a-zA-Z0-9_-:.]/) {
      richtig();
    }
    else {
      falsch();
    }

    mfg Torsten

    --
    Opinions are like assholes: everybody has one.
    ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
    1. Hallo Siechfred,

      if($FORM{'NEWLINKBANNER'} !~ /http[a-zA-Z0-9_-.:/]gif/)

      Afaik kannst du einen RegEx nur mit "=~" anwenden, nicht mit "!=". Also etwa so (ohne Garantie):

      das stimmt so nicht: "!~" ist eine negierte Bindung, also wahr wenn der Ausdruck nicht gematcht werden konnte.

      Grüße,

      Peter

      1. Hallo Peter,

        das stimmt so nicht: "!~" ist eine negierte Bindung, also wahr wenn der Ausdruck nicht gematcht werden konnte.

        Alles klar, hab's gerade in perlrequick gefunden.

        mfg Torsten

        --
        Opinions are like assholes: everybody has one.
        ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
  2. Hallo WachaW,

    ich möchte einen String (Bildurl) auf Richtigkeit testen:

    die semantische Gültigkeit einer URI zu prüfen ist bestimmt keine triviale Aufgabe (siehe auch RFC 1783). Nebenbei bemerkt: Du weist noch lange nicht ob sich hinter einer formal korrekten URI auch Daten befinden.

    if($FORM{'NEWLINKBANNER'} !~ /http[a-zA-Z0-9_-.:/]gif/)
    aber es funktioniert irgendwie nicht, aber warum ?

    Das matchst du im Moment: Irgendetwas - "http" - genau ein def. Zeichen - "gif" - Irgendetwas
    Bei den erlaubten Sonderzeichen fehlt auf jeden Fall schon einmal die Tilde.

    es soll zwischen http und gif (nichts davor und nichts danach) suchen.

    Wenn nichts davor und dahinter stehen soll mußt du Anker für den Anfang ("^") und das Ende ("$") des Strings verwenden.

    Ich dreh bald durch (schon mit . * ? + \w etc. versucht und die ganze Selfhtml Seite durchgelesen - nichts.

    Lies doch noch einmal und achte besonders auf die "Wiederholungsoperatoren".

    Grüße,

    Peter

    p.s.: Gibt es nicht auch Banner als png?

  3. Guten Abend,

    if($FORM{'NEWLINKBANNER'} !~ /http[a-zA-Z0-9_-.:/]gif/)

    besser wäre es vielleicht so:

    if($FORM{'NEWLINKBANNER'} !~ /http://[a-zA-Z0-9_-~.]+gif\b/) [...]

    Das müsste deine URI nur matchen, wenn sie mit http:// anfängt und auf gif endet und dazwischen nur die in den eckigen Klammern genannten Zeichen vorkommen. Wie aber Peter schon schrieb, reicht das natürlich nicht aus, denn dieser RegEx wird auch gematcht, wenn der eingegebene String "http://_.~/bild.gif" lautet. Das ist natürlich keine gültige URI, wird aber trotzdem als solche identifiziert. Wie kompliziert es ist, die Gültigkeit einer E-Mail mittels RegEx zu prüfen, kannst du dir in Selfhtml ja mal anschauen:
    http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/index.html.
    Und die Vorgaben für die Gültigkeit einer URI sind denke ich wesentlich vielfältiger als bei einer E-Mail. Vielleicht solltest du einfach versuchen, die Existenz einer Datei mit Hilfe einer serverseitigen Technik zu prüfen.

    mfg Torsten

    --
    Opinions are like assholes: everybody has one.
    ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}