Bad-Wortfilter
DerDieDas
- perl
0 Beat0 Patrick Andrieu0 Malcolm Beck´s0 LanX!
Hallo!
Kurze frage - wie bau ich einen sicheren Bad-Wortfilter?
Ich dachte mit einem Regulären Ausdruck aber es will einfach nicht klappen, denn wenn ich
$bla =~ m/[^Hallo|Ciao]/;
Eigentlich sollte jetzt das Wort Hallo und Ciao verboten sein aber Hal sowie Ci ist auch verboten. Mit \b also wortbegrenzung bringt es auch nicht wirklich mehr.
Habe mir gedacht eine sub mit allen wörtern zu schreiben und sie dann irgendwie per $bla =~ m/[^sub;]/; zu schreiben aber das klappt nicht.
Wie stellt man sowas am besten an? Bräuchte nur nen hinweis ;)
Lg.
Hallo!
Kurze frage - wie bau ich einen sicheren Bad-Wortfilter?
Ich dachte mit einem Regulären Ausdruck aber es will einfach nicht klappen, denn wenn ich
$bla =~ m/[^Hallo|Ciao]/;
Eigentlich sollte jetzt das Wort Hallo und Ciao verboten sein
Ciao ist nicht verboten.
Verboten sind worte, die beginnen mit
hc Hi Ha Ho aC ai aa ao ....
Wie stellt man sowas am besten an? Bräuchte nur nen hinweis ;)
Studiere die Perl Doku bezüglich Reguläre Expressions.
mfg Beat
Grüße,
$bla =~ m/[^Hallo|Ciao]/;
bin ein Laie - nur zu eigener Kontrolle - das heißt jetz, dass wörter die mit den zeichen aus den bereichen "hallo" oder "ciao" beginnen verboten sind?
MFG
bleicher
Hi,
$bla =~ m/[^Hallo|Ciao]/;
bin ein Laie - nur zu eigener Kontrolle - das heißt jetz, dass wörter die mit den zeichen aus den bereichen "hallo" oder "ciao" beginnen verboten sind?
"^" in einer Zeichenklasse negiert diese, mit String-Anfang hat es nichts zu tun. Das Pipe-Zeichen darfst Du nicht vergessen; es hat innerhalb von Zeichenklassen keine Bedeutung, die von eben diesem Zeichen abweicht.
Cheatah
Hi,
$bla =~ m/[^Hallo|Ciao]/;
Ciao ist nicht verboten.
Verboten sind worte, die beginnen mit
hc Hi Ha Ho aC ai aa ao ....
ähm, nee. Die RegExp ist identisch mit
/[^aCHilo|]/
und reagiert damit auf jedes einzelne Zeichen, das nicht "a", "C", "H", "i", "l", "o" oder "|" ist.
Wie stellt man sowas am besten an? Bräuchte nur nen hinweis ;)
Studiere die Perl Doku bezüglich Reguläre Expressions.
Gleichfalls ;-)
Cheatah
Hallo DerDieDas!
$bla =~ m/[^Hallo|Ciao]/;
Eigentlich sollte jetzt das Wort Hallo und Ciao verboten sein aber Hal sowie Ci ist auch verboten. Mit \b also wortbegrenzung bringt es auch nicht wirklich mehr.
Du möchtest Dich mit der Funktionsweise von Zeichenklassen auseinandersetzen: http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichen.
Habe mir gedacht eine sub mit allen wörtern zu schreiben und sie dann irgendwie per $bla =~ m/[^sub;]/; zu schreiben aber das klappt nicht.
Wie stellt man sowas am besten an? Bräuchte nur nen hinweis ;)
Nicht eine sub mit allen Wörtern, sondern ein Array (oder ext. Datei). In einer sub kannst Du dann den zu prüfenden String gegen die Liste validieren, ob der String eins der »verbotenen Wörter« enthält. Mehr davon in (ich sag's nicht, sonst sagt Gerd, ich würde mein GB zu sehr preisen *g*) - aber klick mal rum auf den Links hier ;)
Viele Grüße aus Frankfurt/Main,
Patrick
hi,
Ich dachte mit einem Regulären Ausdruck aber es will einfach nicht klappen, denn wenn ich
$bla =~ m/[^Hallo|Ciao]/;
Ich verwende folgenden Ausdruck:
"#http|include|script#" ## funzt[TM] bestens
Hat jemand Einwände gegen meinen Ausdruck? [1]
holla holla
[1] so möge er vortreten
Hallo Malcolm!
"#http|include|script#" ## funzt[TM] bestens
Hat jemand Einwände gegen meinen Ausdruck? [1]
[1] so möge er vortreten
Kommt drauf an, was Du mit »http« oder »include« oder »script« anstellen willst... Abberäää, seit wann perlst Du?
Viele Grüße aus Frankfurt/Main,
Patrick
hi,
"#http|include|script#" ## funzt[TM] bestens
Kommt drauf an, was Du mit »http« oder »include« oder »script« anstellen willst...
Achja, verbieten ;)
preg_match ("#http|include|script#", $ENV{'REQUEST_URI'})
If zutrifft { function exikutier($User); } else { exikutier($UserSicherheitshalber); }
;)
Abberäää, seit wann perlst Du?
Irgendwann will ich ja auch mal Programmieren können ;)
holla holla
Hallo Malcolm!
If zutrifft { function exikutier($User); } else { exikutier($UserSicherheitshalber); }
;)
use strict;
use LWP::Simple;
agentur_bashing('l***m', 'http://www.l***m.de');
sub agentur_bashing (agentur, uri) {
my ($agentur, $uri) = @_;
my $result = get("http://validator.w3.org/check?uri=$uri");
if ($result =~ m/passed/) {
print "$agentur kann man vielleicht empfehlen";
else {
print "$agentur ist eine eingebildete Ideen^H^H^Hiotenschmiede";
}
}
;) (Zwar kein Perl, aber aus aktuellem Anlaß...)
Irgendwann will ich ja auch mal Programmieren können ;)
Ja, und wann fängst Du endlich an zu lernen? Immerhin hast Du, im Vergleich zu anderen Fragern hier, Dir Bücher besorgt!
Viele Grüße aus Frankfurt/Main,
Patrick
hi Onkel P.!
Wenn dann:
use strict;
use LWP::Simple;
agentur_bashing('l***m', 'http://www.l***m.de');
my ($agentur, $uri) = @_;
sub agentur_bashing (agentur, uri) {
print "$agentur ist eine eingebildete Ideen^H^H^Hiotenschmiede und sucht den Erfinder der Usability";
}
Wir wollen ja mal Ehrlich sein ;)
Zwar kein Perl
Was ist es denn sonst?
Ja, und wann fängst Du endlich an zu lernen? Immerhin hast Du, im Vergleich zu anderen Fragern hier, Dir Bücher besorgt!
Wenn ich aus den Puschen komm ;) Aber stimmt, die letzten tage kam ich zu nichts, da hätte ich das Buch lesen sollen.
Werde versuchen, die Tage das Buch nochmal durch zu arbeiten, zumindest kenne ich jetzt alle Begriffe, die im Buch vorkommen.
Als ich das Buch zum ersten mal gelesen hatte wusste ich nicht mal, was arrays sind geschweige denn Variablen ;)
holla holla
Hallo Malcolm!
Was ist es denn sonst?
Es gibt diese Art der Funktionsdeklaration, wie ich sie vorhin notiert habe, in Perl nicht:
sub agentur_bashing (agentur, uri) ...
Eine private Funktion (sub) kann zwar mit Parametern aufgerufen werden:
agentur_bashing('foo','bar');
aber das ist dann alles und die Parameter kommen dagegen nie, wenn man's mit JavaScript vergleicht, in der _Deklaration_ der Funktion selbst (zumindest ist es mir nicht bekannt). In JS wäre dies denkbar:
function agentur_bashing (agentur, uri) { tuwas... }
Es gibt zwar die Prototypen-Schreibweise:
sub mysub ($) { tuwas...; }
aber da werde ich aus Ermangelung aus _wirklich konkreten_ Beispielen weder aus »Programmieren mit Perl« noch aus der Perldoku schlau. Möge Struppi oder Siechfred oder vielleicht Beat die passenden dazu bieten, ich wäre ihnen sehr dankbar ;)
Werde versuchen, die Tage das Buch nochmal durch zu arbeiten, zumindest kenne ich jetzt alle Begriffe, die im Buch vorkommen.
Als ich das Buch zum ersten mal gelesen hatte wusste ich nicht mal, was arrays sind geschweige denn Variablen ;)
Ja, das schaffst Du schon. Nur anfangen musste!
Viele Grüße aus Frankfurt/Main,
Patrick
hi Onkel P.!
Was ist es denn sonst?
Es gibt diese Art der Funktionsdeklaration, wie ich sie vorhin notiert habe, in Perl nicht:
Ist das einfach frei erfunden oder gibt es dafür einen begriff? (CGI-Script?!)
Bring mich doch nicht, noch bevor ich mit dem Buch anfange, durcheinander :)
function agentur_bashing (agentur, uri) { tuwas... }
Diese function sieht aus wie eine PHP-Funktion, Funktionen sind aber wohl in vielen Sprachen ähnlich aufgebaut.
aber da werde ich aus Ermangelung aus _wirklich konkreten_ Beispielen weder aus »Programmieren mit Perl« noch aus der Perldoku schlau. Möge Struppi oder Siechfred oder vielleicht Beat die passenden dazu bieten, ich wäre ihnen sehr dankbar ;)
Ich drücke die Daumen ;)
Ja, das schaffst Du schon. Nur anfangen musste!
Ich versuche noch mein Forum wieder in Gang zu setzen[1], dann lese ich einfach drauf los.
holla holla
[1] Hab da noch eine Menge Technischer Probleme ; überall muss man sich reinlesen ... Grausame Welt :)
Es gibt zwar die Prototypen-Schreibweise [...] aber da werde ich aus Ermangelung aus _wirklich konkreten_ Beispielen weder aus »Programmieren mit Perl« noch aus der Perldoku schlau.
Hm, so kompliziert finde ich perlsub: Prototypes nicht. Allerdings ist das Konzept m.E. noch nicht wirklich ausgereift, weshalb ich persönlich es seltenst verwende. Vielleicht wird in drölfzig Jahren durch Perl 6 da was verbessert, wer weiß... ;)
Siechfred
Hallo Siechfred und Beat!
[Prototypen]
Hm, so kompliziert finde ich perlsub: Prototypes nicht. Allerdings ist das Konzept m.E. noch nicht wirklich ausgereift, weshalb ich persönlich es seltenst verwende.
Ich sehe den Sinn darin nicht. Worin liegt der Nutzen, perleigene Funtkionen sozusagen nachzubauen?
Vielleicht wird in drölfzig Jahren durch Perl 6 da was verbessert, wer weiß... ;)
Ach, da sehen wir Perl 5.16.0. Perl 6 kommt in sülzig Jahren ;)
Viele Grüße aus Frankfurt/Main,
Patrick
aber da werde ich aus Ermangelung aus _wirklich konkreten_ Beispielen weder aus »Programmieren mit Perl« noch aus der Perldoku schlau. Möge Struppi oder Siechfred oder vielleicht Beat die passenden dazu bieten, ich wäre ihnen sehr dankbar ;)
Ich habe mich mit prototypen nur marginal befasst und sie nur am Rande eingesetzt.
Prototypen ändern nichts daran, dass perl schlicht eine flache Parameterliste übergibt. Alles was geschieht, ist eine Validitätsprüfung beim sub Aufruf.
Prototypen klären einen User nicht darüber auf, was denn nun zu übergeben sei. Er weiss lediglich: Skalar, Referenz, Liste ...
Es erspart ihm also nicht, die Dokumentation des Autors einer Sub zu studieren.
Prototypen lassen zudem keine flexible Parameterübergabe zu.
Insgesamt sehe ich Prototypen (zum mindestens bis Fassung 5.8) als etwas unperlisches, und die Praxis gibt meiner Einschätzung recht.
mfg Beat
Hi
»» $bla =~ m/[^Hallo|Ciao]/;
wenn ich dich richtig verstehe willst du aber
$bla !~ m/Hallo|Ciao/g;
mfg
LanX
PS: Whos bad?
You know Im bad, Im bad-you know it-you know it
(bad bad-really, really bad)
And the whole world has to answer right now
Just to tell you once again,
Whos bad . . .
$bla !~ m/Hallo|Ciao/g;
Genau betrachtet, das /g kann man sich auch sparen...
PS: Because Im fat, Im fat, sha mone
(fat, fat, really really fat)
You know Im fat, Im fat, you know it
(fat, fat, really really fat)
You know Im fat, Im fat, you know it you know
(fat, fat, really really fat)
And my shadow weighs forty-two pounds
Lemme tell you once again whos fat
$bla !~ m/Hallo|Ciao/g;
Genau betrachtet, das /g kann man sich auch sparen...
ich hätte aber gern noch ein /i
Struppi.
ich hätte aber gern noch ein /i
Ich denke, das muss der OP wissen!