einen regulären ausdruck prüfen
alex_
- programmiertechnik
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
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';
}
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
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/;
my $regexp = param('regex');
my $dbh = DBI->connect("DBI:$driver:$database:$host",
$user,
$password ,
{ PrintError => 0,
RaiseError => 0 }
) || fehlerausgabe($DBI::errstr);
my $Statement = "SELECT foo FROM bar WHERE blubb REGEXP '$regexp'";
my $sth = $dbh->prepare($Statement) || regexpfehler($regexp);
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
jo, so werd ichs machen, thx
alex
Nachtrag.
my $sth = $dbh->prepare($Statement) || regexpfehler($regexp);
das ging so...
aber: $sth = $dbh->execute || regexpfehler($regexp);
das funzt .-)
nochmals danke .-)
bye, alex
das ging so...
... nicht, meinte ich
alex