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
Chris Kraft [ Do, 16 August 2007 00:14 ] [ ID #1796289 ]

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 =
|
------------------------------------------------------------ ------
Niels Braczek [ Do, 16 August 2007 02:32 ] [ ID #1797027 ]

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
Chris Kraft [ Do, 16 August 2007 03:18 ] [ ID #1797028 ]

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 =
|
------------------------------------------------------------ ------
Niels Braczek [ Do, 16 August 2007 05:30 ] [ ID #1797029 ]

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
Heiko Richler [ Do, 16 August 2007 07:58 ] [ ID #1797032 ]

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
Samuel Suther [ Do, 16 August 2007 08:47 ] [ ID #1797034 ]

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
rkhbng [ Do, 16 August 2007 10:04 ] [ ID #1797038 ]

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
Ulf Kadner [ Do, 16 August 2007 12:18 ] [ ID #1797043 ]

Re: [OT] Hilfe bei regulärem Ausdruck

Post removed (X-No-Archive: yes)
Notifier Deamon [ Fr, 17 August 2007 15:54 ] [ ID #1798089 ]

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
Chris Kraft [ Sa, 18 August 2007 19:49 ] [ ID #1798655 ]

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
helmut [ Di, 21 August 2007 15:49 ] [ ID #1801529 ]
PHP » de.comp.lang.php.misc » Hilfe bei regulärem Ausdruck

Vorheriges Thema: array_push mit Schlüsselangabe
Nächstes Thema: Kommunikation mit Browser