| 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! Post your PHP questions here! |
 |
|

05-10-2009, 18:04
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
Regulärer Ausdruck Problem
Hallo Phpler,
ich steh mal wieder vor einem Problem.
Ich schaffs einfach nicht nur ne ordentlich $regExp für preg_match() zusammen zu bauen wie ich es will.
Ich versuchs jetzt seit knapp 2 Tagen mich mit diesem leidigen Thema vertraut zu machen, aber irgendwie funktionierts nicht.
bisher siehts so aus:
$regEXP = "/^[a-zA-Z0-9_@.]+$/s";
Aber irgendwie funktioniert es nur ab und zu.... und das ist blöd
Vielleicht könnte mir jemand von euch helfen und mir die richtige für meine Bedürfnisse basteln.
Wie oben vll zu erkennen sollen nur Zeichen von "a-z", "A-Z", "0-9" und die Sonderzeichen "_", "@", und "." zulässig sein.
Es soll zusätzlich nur ein zusammenhängender String sein dürfen. D.h. sobald ein 2. Wort durch ein leerzeichen getrennt kommt soll es auch unzulässig sein.
Sollt sich jemand damit jemand auskennen und mir helfen können bei meinem Problem wäre ich sehr dankbar.
Gruß
__________________
Der die das, wer wie was, wieso weshalb warum
..... wer nicht fragt bleibt dumm.
|

05-10-2009, 18:25
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Maanee9
Aber irgendwie funktioniert es nur ab und zu.... und das ist blöd
|
Diese Aussage ist als Problembreschreibung auch - blöd.
Beispieldaten?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

05-10-2009, 18:28
|
|
Slava
PHP Senior
|
|
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.583
|
|
Zitat:
Zitat von Maanee9
Aber irgendwie funktioniert es nur ab und zu.... und das ist blöd
|
tja, dannn zeig bitte die Beispiele, wo es sich nach deiner Vorstellung falsch verhält.
modifer 's' passt eigentlich nicht in Logik von deinem Regex, da bei deinem Ausdruck muss du erst mal Zeilenumbruch erlauben, um ihn danach als Zeichen zu berücksichtigen.
|

05-10-2009, 18:29
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Du solltest den Punkt escapen und den Modifier s entfernen.
|

05-10-2009, 18:52
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von onemorenerd
Du solltest den Punkt escapen
|
http://www.php.net/manual/en/regexp.reference.dot.php
Zitat:
|
Dot has no special meaning in a character class
|
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

05-10-2009, 19:14
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
Ok vielen dank.
Ich probiers morgen mal aus.
Hab heute leider wenig Zeit.
Meld mich dann morgen zurück.
__________________
Der die das, wer wie was, wieso weshalb warum
..... wer nicht fragt bleibt dumm.
|

05-10-2009, 22:56
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von Maanee9
... bisher siehts so aus:
$regEXP = "/^[a-zA-Z0-9_@.]+$/s";
...
Wie oben vll zu erkennen sollen nur Zeichen von "a-z", "A-Z", "0-9" und die Sonderzeichen "_", "@", und "." zulässig sein.
Es soll zusätzlich nur ein zusammenhängender String sein dürfen. D.h. sobald ein 2. Wort durch ein leerzeichen getrennt kommt soll es auch unzulässig sein. ...
|
Dafür sollte doch das hier ausreichen:
PHP-Code:
preg_match('/\A[a-zA-Z0-9@_.]+\z/', $heuhaufen, $treffer);
Da ein Leerzeichen nicht in der Zeichenklasse [a-zA-Z0-9@_.] vorkommt, sollte preg_match() bei Strings mit solchen auch eine 0 zurückgeben.
Kleiner Tipp: Wenn du dir nicht merken kannst, welche Bedeutung ^ und $ haben (die kann sich nämlich ändern), dann verzichte lieber darauf und benutze \A für String-Anfang und \z (kleines z) für String-Ende. Deren Bedeutung bleibt immer gleich.
Ähnliches gilt für Modifikatoren. /s hat den lustigen Namen "DOTALL" und das bedeutet, der Punkt steht für alles. Im Normalfall steht der nämlich für alles außer Zeilenumbrüche. Und wie schon erwähnt, gilt das natürlich nicht innerhalb einer Zeichenklasse. Deshalb kannst du ihn weglassen.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

06-10-2009, 19:56
|
|
Maanee9
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 29
|
|
__________________
Der die das, wer wie was, wieso weshalb warum
..... wer nicht fragt bleibt dumm.
|

06-10-2009, 20:56
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.309
|
|
Zitat:
Zitat von Maanee9
Auch wenn ich das regular Expression Zeug immernoch nicht ganz durchblicke.
|
Schau dir ggf. mal das hier an.
Gruß
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

26-03-2010, 13:54
|
|
syntaxerror
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 31
|
|
Zitat:
Zitat von fireweasel
Dafür sollte doch das hier ausreichen:
PHP-Code:
preg_match('/\A[a-zA-Z0-9@_.]+\z/', $heuhaufen, $treffer);
|
Und das nicht?
PHP-Code:
preg_match('/\A[\w@.]+\z/', $heuhaufen, $treffer);
\w = a-z UND A-Z UND '_'
|

26-03-2010, 23:43
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von syntaxerror
Und das nicht?
|
Nö.
Zitat:
PHP-Code:
preg_match('/\A[\w@.]+\z/', $heuhaufen, $treffer);

\w = a-z UND A-Z UND '_'
|
[0-9] scheint bei deiner Lösung zu fehlen.
Der Thread ist übrigens schon ca. sechs Monate alt. Ich glaube kaum, dass der TO deine Tipps noch mitbekommen wird.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

27-03-2010, 00:03
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
\w schließt Ziffern mit ein, auch wenn syntaxerror das vergessen hat, zu erwähnen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

27-03-2010, 10:34
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von AmicaNoctis
\w schließt Ziffern mit ein, auch wenn syntaxerror das vergessen hat, zu erwähnen.
|
Jau, stimmt!
Und weil ich diese Feinheiten gerne vergesse (inklusive der Tatsache, dass "_" ein "word character" ist), ziehe ich Zeichenklassen, in denen explizit aufgezählt wird, was dazugehört (oder nicht) diesen Backslash-Abkürzungen vor. Syntaxerror dagegen scheint in diesem Fall entgegen seiner anderswo postulierten Vorgehensweise "Zeichen sparen zu wollen". Das erscheint mir etwas inkonsequent.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

29-03-2010, 09:02
|
|
syntaxerror
Registrierter Benutzer
|
|
Registriert seit: Mar 2010
Beiträge: 31
|
|
Zitat:
Zitat von AmicaNoctis
\w schließt Ziffern mit ein, auch wenn syntaxerror das vergessen hat, zu erwähnen.
|
Jep, das war mein Fehler, sry. Hatte mich aber in der Tat vor dem Posten vergewissert gehabt, dass die Ziffern mit von der Partie sind...
Zitat:
Zitat von fireweasel
|
Isses aber nicht. Ich spare da Zeichen, wo es dennoch kompatibel bleibt. Das hast du bei deinem Threadzitat gänzlich außer Acht gelassen! (wie immer wenn man was aus dem Kontext rauszieht)
Bei \w kann ich ja nachweislich davon ausgehen, dass das PHP kann sowie Perl, sowie Javascript und u. U. noch ein paar mehr.
Diese /U Geschichten könnten aber z. B. bei einigen Regex-Implementationen Probleme machen. Jedenfalls ist mir mindestens schon vor einiger Zeit mal eine Impl. untergekommen, die konnte /U gar nicht!
Geändert von syntaxerror (29-03-2010 um 09:14 Uhr)
|

29-03-2010, 10:46
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
@syntaxerror: Sei doch bitte so gut, und Kram nicht die ganzen alten Threads wieder hervor. Ich finde es toll, dass du dich fachlich ins Forum einbringst, aber wäre es nicht ratsamer, du konzentrierst dich auf akute Probleme? =)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|