alex_: einen regulären ausdruck prüfen

hallo ihrs,

ich habe ne suche und lasse den nutzer einen regulären ausdruck anwenden, wie aber prüfe ich den ausdruck bevor ich ihn zulasse?

gibts ne regexp für regexps? .-)

danke

  1. Was willst Du denn nicht in dem Ausdruck haben?
    Den Ausdruck bekommst Du ja über ein Formular.
    Du könntest also etwas machen wie:
    (Perl)
    my $userregex = $q->param('regex');
    my $ergebnis = 'Bitte geben Sie den Ausdruck ein:';
    my $match = 0;
    if ($userregex =~ /^\w+$/) {
            # dieser Ausdruck ist sehr simple und ueberfluessig, da er nur alphanumerische Zeichen zulaesst
            $match = 1;
    } else {
            $match = 0;
    }
    if ($match == 1) {
            # ... wende den Ausruck an
            $ergebnis = 'Hat geklappt';
    } else {
            $ergebnis = 'Der Ausdruck hat nicht gepasst';
    }

    1. ich will einfach falsche Ausdrücke feststellen:

      zb soll "[a-z)*" nicht als regexp erkannt werden...

      weil man in mysql nämlich auch nach regexp suchen kann, nur
      bricht mein perl script ab, wenn die usereingabe ne falsche regexp war, falls du ne idee hast, wie ich prüfe ob mysql wegen ner regexp kein do() machte, würd ich mich auch freuen .-)
      momentan hab ich raiseerror an und checke $@, das bringt in dem fall aber nix (glaub ich)

      byebye

      1. Tag alex_.

        ich will einfach falsche Ausdrücke feststellen [...] weil man in mysql nämlich auch nach regexp suchen kann, nur bricht mein perl script ab, wenn die usereingabe ne falsche regexp war

        Dann fange diesen Fehler ab und lass das Script nicht einfach so sterben:

        use DBI;
        use CGI qw /param/;

        Regex holen

        my $regexp = param('regex');

        Verbindung herstellen

        my $dbh = DBI->connect("DBI:$driver:$database:$host",
                               $user,
                               $password ,
                               { PrintError => 0,
                                 RaiseError => 0 }
                              ) || fehlerausgabe($DBI::errstr);

        Statement zusammenbauen

        my $Statement = "SELECT foo FROM bar WHERE blubb REGEXP '$regexp'";
        my $sth = $dbh->prepare($Statement) || regexpfehler($regexp);

        weiter im Erfolgsfall wie gehabt

        Dann musst du dir nur noch eine Fehlerroutine zu basteln, die eine aussagekräftige Meldung liefert. Gibt sicher auch elegantere Wege, der o.g. sollte jedenfalls funktionieren.

        momentan hab ich raiseerror an und checke $@, das bringt in dem fall aber nix (glaub ich)

        Du weißt hoffentlich, was RaiseError bedeutet:
        The RaiseError attribute can be used to force errors to raise exceptions rather than simply return error codes in the normal way. It is "off" by default. When set "on", any method which results in an error will cause the DBI to effectively do a die("$class $method failed: $DBI::errstr"), where $class is the driver class and $method is the name of the method that failed.

        Siechfred

        --
        »Sie kochten heimlich mit Wasser und tranken öffentlich Wein.«
        1. jo, so werd ichs machen, thx
          alex

        2. Nachtrag.

          my $sth = $dbh->prepare($Statement) || regexpfehler($regexp);

          das ging so...

          aber: $sth = $dbh->execute || regexpfehler($regexp);
          das funzt .-)

          nochmals danke .-)
          bye, alex

          1. das ging so...

            ... nicht, meinte ich

            alex