WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 23.03.2005, 13:58   #1
kingchaos01
Veteran
 
Registriert seit: 30.09.2000
Beiträge: 267


Standard kleines REGEX-Problem

Hallo!
Ich möchte einen String in PHP auf eine Anzahl zulässiger Zeichen prüfen. Bei Vorhandensein eines nicht gültigen Chars soll abgebrochen werden.
Erlaubt sind:
0-9
a-z
_ (Unterstrich)
. (Punkt)
- (Minus)

Meine Versuch dazu:
PHP-Code:
if (!eregi("([_\.0-9a-z-]+)",$filename)) {
      die (
"Uebergabeparameter nicht korrekt!");
  } 
Leider matcht die Regex immer, auch wenn zB ein "\" vorkommt. Der RegexCoach zeigt mir an, dass die Regex dann einen Teil matcht. Ich müsste aber sicherstellen, dass im ganzen String kein "böser" char vorkommt.
Kann mir jemand helfen?

tia
Roland
kingchaos01 ist offline   Mit Zitat antworten
Alt 23.03.2005, 15:20   #2
paux
Veteran
 
Registriert seit: 25.09.2001
Beiträge: 386


Standard

Ohne jetzt groß nachzudenken:

Angenommen es sind nur die Zeichen a und b erlaubt.

test .*[ab].* = Zeichen a oder b kommen vor, die anderen sind völlig frei.
!test .*[ab].* = Es kommt weder a noch b vor.
test .*[^ab].* = Es kommen Zeichen vor, die weder a noch b sind.

Daher möchtest du die dritte Variante nehmen.

lg paux
____________________________________
SpamAssassin - The only pne|s en|@rgement p|II that really works!
paux ist offline   Mit Zitat antworten
Alt 23.03.2005, 16:00   #3
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Einen Punkt "." repäsentiert in einer Regex zumeist ein beliebiges Zeichen, daher muss er im Regelfall mit einem Backslash "\" escaped werden.
Also
Code:
[_\.0-9a-z-]
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 23.03.2005, 16:02   #4
kingchaos01
Veteran
 
Registriert seit: 30.09.2000
Beiträge: 267


Standard

verh****:
den "\" vor dem Punkt habe ich eh gemacht. Mir schleierhaft, wo der abgeblieben ist.
kingchaos01 ist offline   Mit Zitat antworten
Alt 23.03.2005, 16:19   #5
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Also bei mir (perl) hat er mit
Code:
if( $file =~ /[^_\.0-9a-z-]/gi)
den gewünschten Effekt gebracht.
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 23.03.2005, 16:48   #6
kingchaos01
Veteran
 
Registriert seit: 30.09.2000
Beiträge: 267


Standard

hm, die lösung hab ich jetzt so gefunden:

!preg_match("/^[0-9a-zA-Z_\.-]*$/",$filename)

Das scheint zu funzen!
Es lebe google-groups

Danke für eure Zeit!
Roland
kingchaos01 ist offline   Mit Zitat antworten
Alt 23.03.2005, 16:52   #7
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Wäre es mit
Code:
preg_match("/[^0-9a-zA-Z_\.-]/",$filename)
nicht eleganter (und ev. schneller)?
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 23.03.2005, 17:52   #8
paux
Veteran
 
Registriert seit: 25.09.2001
Beiträge: 386


Standard

@kingchaos01: Das Dacherl gehört wohl in die Klammer, so wie ich es angegeben hatte. Außerdem ist mir nicht klar wieso du das preg_match ver-nicht-est. Du wollst ja testen OB Zeichen vorkommen die NICHT erlaubt sind?
____________________________________
SpamAssassin - The only pne|s en|@rgement p|II that really works!
paux ist offline   Mit Zitat antworten
Alt 23.03.2005, 17:53   #9
paux
Veteran
 
Registriert seit: 25.09.2001
Beiträge: 386


Standard

[scheißdreck]
____________________________________
SpamAssassin - The only pne|s en|@rgement p|II that really works!
paux ist offline   Mit Zitat antworten
Alt 23.03.2005, 17:56   #10
kingchaos01
Veteran
 
Registriert seit: 30.09.2000
Beiträge: 267


Standard

hm, ich seh das so:
die regex liefert true, wenn *nur* die werte vom pattern enthalten sind. bei verneinung springt "die" an.
also "if not true, springe in die condition".
kingchaos01 ist offline   Mit Zitat antworten
Antwort


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

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.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:58 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag