Forum: PC-Programmierung PHP Regex: Ungültige Zeichen finden


von D. I. (Gast)


Lesenswert?

Ein Name soll nur folgende Zeichen enthalten können:

A-Z a-z 0-9 $ _ - * ~

Also wollte ich eine Regex bauen die testet ob sich unerlaubte Zeichen 
im String befinden:

"[^a-ZA-Z0-9\$\_\-\~\*]"

Leider funktioniert die nicht:
1
echo preg_match("[^a-ZA-Z0-9\$\_\-\~\*]", "aaaAAABBBCC09C~\$_-*");

liefert erwartungsgemäß 0

und
1
echo preg_match("[^a-ZA-Z0-9\$\_\-\~\*]", "aaaAAABBBCC09C~\$_-*§!");

sollte jedoch 1 liefern.

Was ist falsch?

von Chris R. (hownottobeseen)


Lesenswert?

ich glaube, du musst das - richtig escapen. Außerdem ist das a-Z falsch.

Mit preg_match('/[^a-Z0-9$_\\-~*]/', $subject) klappte es hier.

von D. I. (Gast)


Lesenswert?

Chris R. schrieb:
> Außerdem ist das a-Z falsch.

Das ist natürlich ein grober Schnitzer gewesen.

Leider liefert
1
echo preg_match("[^a-zA-Z0-9\$\_\\-\~\*]", "aaaAAABBBCCC~\$_-*§!");

immer noch 0

von Chris R. (hownottobeseen)


Lesenswert?

Statt a-z und A-Z kannst du auch direkt a-Z verwenden. Damit der 
Ausdruck funktioniert, solltest du vorne und hinten / einfügen. Zudem 
besser ' (Hochkomma) verwenden, dann gibt's mit $ keine Probleme.

von D. I. (Gast)


Lesenswert?

Chris R. schrieb:
> solltest du vorne und hinten / einfügen

Das war der Fehler.

Aber warum? was bedeuten die /

von Chris R. (hownottobeseen)


Lesenswert?

D. I. schrieb:
> Aber warum? was bedeuten die /

Das kommt soweit ich weiß von der Anlehnung an Perl (deswegen auch das P 
in preg). Hinter dem zweiten / kannst du übrigens auch Case-Sensitivity, 
dot maches new line und ^$ matches at linebreaks angeben.

Siehe auch: 
http://www.php.net/manual/de/reference.pcre.pattern.syntax.php

von Rolf Magnus (Gast)


Lesenswert?

Wie wär's, mal das Handbuch zu lesen?

http://www.php.net/manual/de/intro.pcre.php

> Die Syntax für Suchmuster, die in diesen Funktionen verwendet werden, ist
> Perl sehr ähnlich. Der Ausdruck muss zwischen Begrenzungszeichen, z.B.
> Schrägstrichen (/), stehen. Als Begrenzungszeichen darf jedes Zeichen
>  verwendet werden, das nicht alphanumerisch ist und das, mit Ausnahme des
>  Backslashs (\) und des Nullzeichens, kein ASCII-Leerzeichen ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.