php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 05-12-2007, 08:57
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard Regex für/gegen Viagra steht nicht so ganz

Mein Postfix ist (neben anderen Vorkehrungen) auch Dank regex ziemlich kurz und wirksam.
Gegen Mail-Varianten der blauen Pille im Betreff war ich bis jetzt sicher.
PHP-Code:
/^Subject:.*v[W_]{0,2}[i1][W_]{0,2}[a@][W_]{0,4}g[W_]{0,2}r[W_]{0,2}[a@].*/    REJECT 
Der Spaßmacher rauschte aber durch.
Subject: Viiaaaagra... - 1.79$ Jetzt bestellen und Spass haben -- But you don't just

Überlegungen
- vorab: .*
- V: v[\W_]{0,2} #case-sensitive
- ii: [i1][\W_]{0,2}
- aaaa: [a@][\W_]{0,4}
- g: g[\W_]{0,2}
- r: r[\W_]{0,2}
- a: [a@].*

In einigen Jahren ist mein Ohr für entsprechende Angebote vielleicht etwas offener. Momentan will und muss ich davon nichts wissen. An welcher Stelle schlüft der Pillenvertreter durch - doch nicht etwa schon beim V?
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia
Mit Zitat antworten
  #2 (permalink)  
Alt 05-12-2007, 09:13
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard Re: Regex für/gegen Viagra steht nicht so ganz

Ich weiß zwar nicht, was [a@] ist, aber in meiner Welt matcht v nur mit V, wenn man case-insensitive sucht.
Mit Zitat antworten
  #3 (permalink)  
Alt 05-12-2007, 09:27
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

edit:
- V: v[\W_]{0,2} #case-sensitive --> #case-insensitive Standard

[a@]: entweder ein a oder ein @, welches ggf durch {0,3} halt 0 oder 3 mal vorkommen kann.
caseinsenitive mit /i meinte ich bisher nicht setzen zu müssen, da es Postfix bei den regex egal ist, ob groß oder klein geschrieben wird.
U.u. kommt aber der OberChecker [W_] als Störenfied in die Quere?
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia
Mit Zitat antworten
  #4 (permalink)  
Alt 05-12-2007, 10:34
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
\w
any "word" character
\W
any "non-word" character
Vielleicht meinst du ersteres??
Mit Zitat antworten
  #5 (permalink)  
Alt 05-12-2007, 10:51
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
\w
any "word" character
\W
any "non-word" character
genau, denn diese Kollegen wollen mir nicht so recht schmecken vor allem in Verbindung mit z.B. {0,4}
Bei regex ist der Löffel der Weisheit ohnehin an mir vorbeigegangen. Ich bereue und arbeite dran. Und just obiges Beispiel zeugt davon.

statt:
/^Subject:.*v[W_]{0,2}[i1][W_]{0,2}[a@][W_]{0,4}g[W_]{0,2}r[W_]{0,2}[a@].*/ REJECT

besser so:
/^Subject:.*v{0,2}[W_][i1]{0,2}[W_][a@]{0,4}[W_]g{0,2}[W_]r{0,2}[a@].*/ REJECT

???
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia

Geändert von Husti (05-12-2007 um 10:56 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 05-12-2007, 11:05
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Du hast es immer noch nicht!
Code:
\w => ein "Wort"-Zeichen
\W => ein "Nicht-Wort"-Zeichen
Hausaufgabe: Ordne die Buchstaben v, i, a, g und r in eine der zwei Gruppen ein!
Mit Zitat antworten
  #7 (permalink)  
Alt 05-12-2007, 12:16
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Du hast es immer noch nicht!
Könnte daran liegen, dass ich versuche, dieses eine Probleme parallel zu meinen anderen Aufgaben zu lösen.
Sorry - ich war da nicht ganz bei der Sache obwohl du dir dafür Zeit genommen hast.

Ich werde jetzt \W in \w ändern und prüfen.

Danke für den Tip und nochmals Entschuldigung.
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia
Mit Zitat antworten
  #8 (permalink)  
Alt 05-12-2007, 12:41
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

# \w : ein Buchstabe, eine Ziffer oder der Unterstrich, also [a-zA-Z_0-9] (und evtl. weitere Buchstaben, z. B. Umlaute)
# \W : ein Zeichen, das weder Buchstabe noch Zahl noch Unterstrich ist, also [^\w]

Weder das eine noch das andere prüft die eigentlichen Buchstaben v, i, a, g, r. UNd daher schwänze ich die angeordnete Hausaufgabe.

Es wird doch geprüft, was jeweils dazwischen stehen könnte
- # \W : .|$§()=/\
- # \w : a-zA-Z_0-9

Daher ist das \W schon nicht ganz verkehrt. Die Angabe zur möglichen Anzahl trudelt.
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia
Mit Zitat antworten
  #9 (permalink)  
Alt 05-12-2007, 12:48
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Das Suchwort ist Viagra mit einer beliebigen Anzahl der Buchstaben, wie in deinem Beispiel Viiaaaagra.
Ich persönlich würde die Regex so basteln:
Code:
/^Subject:.*v*[i1]*[a@]*g*r*[a@]*.*/i
Soll auch Viia.a@-gra gefunden werden, ist \w natürlich nicht korrekt. Kommt das denn aber vor, dass ein Sonderzeichen (außer @) dazwischen steht?
Mit Zitat antworten
  #10 (permalink)  
Alt 05-12-2007, 12:56
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

V|iagra
V|agra
V!agra
V/agra
(Pfizer? freut sich)
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia
Mit Zitat antworten
  #11 (permalink)  
Alt 05-12-2007, 13:12
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die oben fehlenden Backslashes \W sind natürlich immer da gewesen.

Heiße Nadel und eigentlich viel zu fett:

/^Subject:.*v{0,2}[\W_]{0,2}[i1]{0,2}[\W_]{0,2}[a@]{0,4}[\W_]{0,2}g{0,2}[\W_]{0,2}r{0,2}[a@].*/ REJECT

# v{0,2}: Null bis 2 mal das v
# [\W_]{0,2}: kein bis zwei Nicht-Buchstaben/Nicht-Zahlen
# [i1]{0,2}: kein bis zwei i ODER 1
# [\W_]{0,2}: kein bis zwei Nicht-Buchstaben/Nicht-Zahlen
# [a@]{0,4}: kein bis vier a oder @
# [\W_]{0,2}: kein bis zwei Nicht-Buchstaben/Nicht-Zahlen
# g{0,2}: Null bis 2 mal das g
# [\W_]{0,2}: kein bis zwei Nicht-Buchstaben/Nicht-Zahlen
# r{0,2}: Null bis 2 mal das r
# [a@].*: a ODER @ und wildcard danach
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia
Mit Zitat antworten
  #12 (permalink)  
Alt 06-12-2007, 11:49
Cymon
 Junior Member
Links : Onlinestatus : Cymon ist offline
Registriert seit: Mar 2004
Ort: Koblenz
Beiträge: 106
Cymon ist zur Zeit noch ein unbeschriebenes Blatt
Standard Begriffserkennung

Mit den regulären Ausdrücken wirst du nicht glücklich werden. Egal wie komplex du den Ausdruck baust, es wird immer noch sehr einfach sein, sich eine Schreibweise einfallen zu lassen, die der Ausdruck nicht "frisst".

Moderne Spamfilter arbeiten mit einem Punktesystem, ähnlich dem Punktesystem in Flensburg. Wird eine (Mail-)Verkehrsregel verletzt, gibt's Punkte und ab x Punkten ist der Lappen weg.

Hier mal eine Übersichtsliste der Filterkriterien von SpamAssassin, einem Open Source Projekt: http://spamassassin.apache.org/tests_3_2_x.html
"Viagra" ist noch deren kleinste Sorge.

Wenn du also vor Cialia, Viagra und "Is HE too small" einigermassen sicher sein willst, dann solltest du die Begriffe über eine Fuzzy Logic vergleichen und Grenzwerte setzen, ab denen ein Begriff für dich unter "Spam" fällt.

In PHP bieten sich dafür beispielsweise die Befehle Levenshtein oder similar_text an.

Mal ein paar Beispiele:

PHP-Code:
// Ergibt 1
$str1 "viagra"$str2 "viagra"
echo  
1-levenshtein($str1$str2)/max(strlen($str1), strlen($str2));

// Ergibt ~0.83
$str1 "viagra"$str2 "v/agra"

// Ergibt 0.14
$str1 "viagra"$str2 "venedig"
Wenn man den Wert auf >0.4 überprüft, sollte man einigermassen auf der sicheren Seite sein. Zudem kann man andere "böse" Begriffe wie "Cialis" in einen Array zusammen mit dem jeweiligen Grenzwert packen, um dann alle Begriffe im Betreff zu überprüfen.
__________________
Happiness is an empty error log
Mit Zitat antworten
  #13 (permalink)  
Alt 06-12-2007, 13:25
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard Re: Begriffserkennung

Zitat:
Original geschrieben von Cymon
In PHP bieten sich dafür beispielsweise die Befehle Levenshtein oder similar_text an.
Mailfilter in einer interpretierten Sprache wie PHP sind viel zu langsam und haben zu viel Overhead.

Dieser Ausdruck ist mit einem Spamfilter nicht zu vergleichen. Das steht wohl außer Frage. Ich nehme an, es ist nur ein "Vorfilter", um den spamd zu entlasten.
Ein gutes* Beispiel, wie sowas nach hinten losgehen kann. Denn der Spamassassin hätte die genannte Mail wahrscheinlich aussortiert. Leider hat er noch nie zuvor etwas von Viagra gehört ...

*) Eigentlich kein gutes Beispiel. Mein SA übergeht das Wort Viagra (skip:V 10, spamprob 0.285728) - wahrscheinlich wegen der Pünktchen dahinter. Aber das Prinzip paßt: Wenn man den SA per Vorfilter am Lernen hindert, ist er nicht vorbereitet, wenn mal etwas den Vorfilter passiert.
Mit Zitat antworten
  #14 (permalink)  
Alt 06-12-2007, 16:58
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Bevor sich mein SA mit medizinischen Erzeugnissen befasst und dabei Ressourcen vernascht, wird schon an der Türe geprüft (u.a. auch mit header_checks, body_checks, rbl) wer rein darf und wo weitere Prüfungen reine Zeitverschwendung sind.
Ich prüfe parallel was im Endeffekt praktische Wirkung zeigt.

Andererseits hatte ich mit regex bis dato (sträflicherweise) nur ganz oberflächlich zu tun und wollte diese Wissenslücke by the way ansatzweise stopfen. Das Aufdröseln am konkreten Beispiel und eure Ergänzungen werden sicherlich einigen anderen Lesern auch ganz gut tun.
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia
Mit Zitat antworten
  #15 (permalink)  
Alt 06-12-2007, 23:31
Husti
 Junior Member
Links : Onlinestatus : Husti ist offline
Registriert seit: Jan 2003
Ort: Fischkoppland
Beiträge: 130
Husti ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die regex ist doch nicht ganz so verkehrt. Neben lustlosen Standard-Schreibweisen, die abgewiesen werden konnten, war auch dieser Exot dabei, der abgeschossen wurde: V|a_g r-a

and that's all 4 today
__________________
Und ist man alt wie ein Kuh, lernt man immer noch dazu.
THX, LOL, ROFL & Co. -> Netzjargon auf Wikipedia
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:27 Uhr.