Hilfe bei regulärem Ausdruck
Hallo NG,
könnt ihr mir bitte bei einem regulären Ausdruck helfen? Und zwar möchte
ich erreichen, dass eine Zeichenkette 3-20 Zeichen lang sein muss, das
erste Zeichen kein Leerzeichen sein darf und die Zeichen % und ; nicht
vorkommen dürfen.
Mein Lösungsansatz wäre:
if (
!preg_match('/^[[:print:]]{3,20}$/', $neue_seite) ||
preg_match('/^\s(.{0,})$/', $neue_seite) ||
preg_match('/^.{0,}([%]+).{0,}$/', $neue_seite) ||
preg_match('/^.{0,}([;]+).{0,}$/', $neue_seite)
)
echo Fehlermeldung;
Das scheint zwar zu gehen, aber so ganz sicher bin ich mir irgendwie
nicht...
Danke für's Anschauen!
Gruß
Chris
Re: Hilfe bei regulärem Ausdruck
Chris Kraft schrieb:
> könnt ihr mir bitte bei einem regulären Ausdruck helfen? Und zwar m=
öchte
> ich erreichen, dass eine Zeichenkette 3-20 Zeichen lang sein muss, das
> erste Zeichen kein Leerzeichen sein darf und die Zeichen % und ; nicht
> vorkommen dürfen.
> Mein Lösungsansatz wäre:
>
> if (
> !preg_match('/^[[:print:]]{3,20}$/', $neue_seite) ||
> preg_match('/^\s(.{0,})$/', $neue_seite) ||
> preg_match('/^.{0,}([%]+).{0,}$/', $neue_seite) ||
> preg_match('/^.{0,}([;]+).{0,}$/', $neue_seite)
> )
> echo Fehlermeldung;
>
> Das scheint zwar zu gehen, aber so ganz sicher bin ich mir irgendwie
> nicht...
Das hast du recht kompliziert gelöst.
Generell:
{0,} kannst du durch * ersetzen.
=2E{0,}$ kannst du weglassen, ebenso ^.{0,}
Zeichenklassen für einzelne Zeichen sind unnötig, wenn man nicht
negieren will.
Deine Bedingung lässt sich zudem in einem Ausdruck zusammenfassen.
$pattern =3D '~^[^\s][^;%]{2,19}$~';
if ( preg_match( $pattern, $neue_seite ) ) {
echo 'Passt!';
} else {
echo 'Fehlermeldung';
}
Das Muster prüft auf 1 Nicht-Whitespace am Anfang gefolgt von 2-19
Zeichen, die nicht ; oder % sind.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Hilfe bei regulärem Ausdruck
Am 16.08.2007, 02:32 Uhr, schrieb Niels Braczek <nbraczek [at] freenet.de>:
> $pattern = '~^[^\s][^;%]{2,19}$~';
Danke für die Hilfe!
Um solche Fragen in Zukunft selbst lösen zu können: kennst du irgendwo ein
gutes, möglichst deutsches, Tutorial zu regulären Ausdrücken?
Gruß
Chris
Re: Hilfe bei regulärem Ausdruck
Chris Kraft schrieb:
> Um solche Fragen in Zukunft selbst lösen zu können: kennst du irgen=
dwo ein
> gutes, möglichst deutsches, Tutorial zu regulären Ausdrücken?
Die Manual-Seite ist eigentlich völlig ausreichend
(http://de.php.net/manual/en/ref.pcre.php).
Suche mal im Netz nach "RegEx Coach"; das ist ein nettes Programm, mit
dem du reguläre Ausdrücke testen kannst.
MfG
Niels
--
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------
Re: Hilfe bei regulärem Ausdruck
Niels Braczek wrote:
> Deine Bedingung lässt sich zudem in einem Ausdruck zusammenfassen.
>
> $pattern = '~^[^\s][^;%]{2,19}$~';
> Das Muster prüft auf 1 Nicht-Whitespace am Anfang gefolgt von 2-19
> Zeichen, die nicht ; oder % sind.
So wie ich die Frage verstehe soll auch das erste Zeichen kein ; oder %
sein. Darum würde ich diese noch ergänzen:
$pattern = '~^[^\s;%][^;%]{2,19}$~';
Heiko
Re: Hilfe bei reguläremAusdruck
Niels Braczek wrote:
> Chris Kraft schrieb:
>
>> könnt ihr mir bitte bei einem regulären Ausdruck helfen? Und zwar möchte
>> ich erreichen, dass eine Zeichenkette 3-20 Zeichen lang sein muss, das
>> erste Zeichen kein Leerzeichen sein darf und die Zeichen % und ; nicht
>> vorkommen dürfen.
>> Mein Lösungsansatz wäre:
>>
>> if (
>> !preg_match('/^[[:print:]]{3,20}$/', $neue_seite) ||
>> preg_match('/^\s(.{0,})$/', $neue_seite) ||
>> preg_match('/^.{0,}([%]+).{0,}$/', $neue_seite) ||
>> preg_match('/^.{0,}([;]+).{0,}$/', $neue_seite)
>> )
>> echo Fehlermeldung;
>>
>> Das scheint zwar zu gehen, aber so ganz sicher bin ich mir irgendwie
>> nicht...
>
> Das hast du recht kompliziert gelöst.
> Generell:
> {0,} kannst du durch * ersetzen.
> .{0,}$ kannst du weglassen, ebenso ^.{0,}
> Zeichenklassen für einzelne Zeichen sind unnötig, wenn man nicht
> negieren will.
>
> Deine Bedingung lässt sich zudem in einem Ausdruck zusammenfassen.
>
> $pattern = '~^[^\s][^;%]{2,19}$~';
> if ( preg_match( $pattern, $neue_seite ) ) {
> echo 'Passt!';
> } else {
> echo 'Fehlermeldung';
> }
> Das Muster prüft auf 1 Nicht-Whitespace am Anfang gefolgt von 2-19
> Zeichen, die nicht ; oder % sind.
>
> MfG
> Niels
>
Oder mach es dir für die Zukunft noch einfacher und lade dir txt2regex
Ich wei zwar nicht ob es das auch für Windoof gibt, aber ich setzte mal
vorraus, das du als Progger sowieso n vernünftiges OS (nämlich Linux) nutzt
Re: Hilfe bei regulärem Ausdruck
Chris Kraft schrieb:
> Um solche Fragen in Zukunft selbst lösen zu können: kennst du irgendwo ein
> gutes, möglichst deutsches, Tutorial zu regulären Ausdrücken?
An Stellen, wo man es nicht vermuten würde:
http://de.selfhtml.org/perl/sprache/regexpr.htm
und
http://download.microsoft.com/download/winscript56/Install/5 .6/W98NT42KMe/DE/scd56de.exe
unter
JScript
JScript Benutzerhandbuch
Einführung in reguläre Ausdrücke
und der "Spickzettel":
http://www.phpguru.org/downloads/PCRE%20Cheat%20Sheet/PHP%20 PCRE%20Cheat%20Sheet.pdf
viele grüße
ralph
Re: Hilfe bei regulärem Ausdruck
Ralph 'rkhb' Bauer wrote:
> http://de.selfhtml.org/perl/sprache/regexpr.htm
Ok um Regex erst mal zu verstehen.
> http://download.microsoft.com/download/winscript56/Install/5 .6/W98NT42KMe/DE/scd56de.exe
Nutz garnix, da es mit den Eigenheiten von PHP-internen Regexen nicht
umgehen kann.
MfG, Ulf
Re: [OT] Hilfe bei regulärem Ausdruck
Post removed (X-No-Archive: yes)
Re: Hilfe bei regulärem Ausdruck
Am 16.08.2007, 07:58 Uhr, schrieb Heiko Richler <heiko-richler [at] nefkom.net>:
> $pattern = '~^[^\s;%][^;%]{2,19}$~';
Genau das, was ich gebraucht habe!
Danke nochmal an alle für die Hilfe!
Gruß
Chris
Re: Hilfe bei regulärem Ausdruck
Hallo, Ralph,
Du (rkhbng) meintest am 16.08.07:
>> Um solche Fragen in Zukunft selbst lösen zu können: kennst du
>> irgendwo ein gutes, möglichst deutsches, Tutorial zu regulären
>> Ausdrücken?
> An Stellen, wo man es nicht vermuten würde:
> http://de.selfhtml.org/perl/sprache/regexpr.htm
(usw.)
http://arktur.de/FAQ/31_119_de.html
Darf das so bleiben?
Viele Gruesse!
Helmut