Problem mit Regular Expression

Problem mit Regular Expression

am 21.06.2006 13:15:42 von Sebastian Deiszner

Hallo,

ich prüfe die Variable "telefon" auf ungültige Buchstaben.

Ich würde gern auch ein false bekommen, wenn die Variable "telefon" leer ist - am besten in die Regex eingebaut.

Wie mache ich das?

gruß

Sebastian

if(preg_match('~[^-\s\d./()+]~', $telefon)){

Re: Problem mit Regular Expression

am 21.06.2006 13:37:45 von Jens Riedel

Sebastian Deiszner wrote:

> ich prüfe die Variable "telefon" auf ungültige Buchstaben.
>
> Ich würde gern auch ein false bekommen, wenn die Variable "telefon" leer
> ist - am besten in die Regex eingebaut.
>
> Wie mache ich das?

Indem du aus deiner negativen Bedingung die umgekehrte positive machst
und dann ein + anhängst.

> if(preg_match('~[^-\s\d./()+]~', $telefon)){

Wird dann zu

if(preg_match('~^[-\s\d./()+]+$~', $telefon)){

(ungetestet)

Gruß,
Jens


--
Der Kluegere gibt nach - Eine traurige Wahrheit:
sie begruendet die Weltherrschaft der Dummen.
- Marie von Ebner-Eschenbach

Re: Problem mit Regular Expression

am 22.06.2006 11:55:56 von Sanynome

Sebastian Deiszner wrote:
> Hallo,
>
> ich prüfe die Variable "telefon" auf ungültige Buchstaben.
>
> Ich würde gern auch ein false bekommen, wenn die Variable "telefon" lee=
r ist - am besten in die Regex eingebaut.
>
> Wie mache ich das?
>
> gruß
>
> Sebastian
>
> if(preg_match('~[^-\s\d./()+]~', $telefon)){

was soll ~ sein?
- ist auch falsch
.. ist ne wildcard also muss escaped werden
/ muss auch escaped werden
( auch
) auch
+ auch

also

preg_match('/[^\-\s\d\.\/\(\)\+]/', $telefon)
.....

Re: Problem mit Regular Expression

am 22.06.2006 12:10:35 von Frank Schenk

Hallo Sanonyme,

Sanynome@gmail.com wrote:
^^^^^^^^^^^^^^^^^^

hier werden Realnames bevorzugt.

>>if(preg_match('~[^-\s\d./()+]~', $telefon)){
>
>
> was soll ~ sein?

Der Handbuchvorlesedienst:

The expression should be enclosed in the delimiters, a forward slash
(/), for example. Any character can be used for delimiter as long as
it's not alphanumeric or backslash (\). If the delimiter character has
to be used in the expression itself, it needs to be escaped by backslash.

Quelle:
http://de2.php.net/manual/en/ref.pcre.php

> - ist auch falsch
> . ist ne wildcard also muss escaped werden
> / muss auch escaped werden
> ( auch
> ) auch
> + auch

[ ] Du hast erkannt, daß diese Zeichen in einer Character Class stehen.

Siehe Handbuch:

Part of a pattern that is in square brackets is called a "character
class". In a character class the only meta-characters are:

\

general escape character
^

negate the class, but only if the first character
-

indicates character range
]

terminates the character class


Quelle:
http://de2.php.net/manual/en/reference.pcre.pattern.syntax.p hp

>
> also
>
> preg_match('/[^\-\s\d\.\/\(\)\+]/', $telefon)

Das ist leider Mumpitz.


gruß, Frank

Re: Problem mit Regular Expression

am 22.06.2006 12:17:12 von Carsten Wiedmann

Sanynome@gmail.com schrieb:

> Sebastian Deiszner wrote:
> >
> > if(preg_match('~[^-\s\d./()+]~', $telefon)){
>
> was soll ~ sein?
> - ist auch falsch
> . ist ne wildcard also muss escaped werden
> / muss auch escaped werden
> ( auch
> ) auch
> + auch
>
> also
>
> preg_match('/[^\-\s\d\.\/\(\)\+]/', $telefon)

Ohne mich jetzt mit dem Pattern wirklich auf Funktion zu beschäftigen:
- `~' ist der Patternbegrenzer
- ein `-' an erster Stelle muss innerhalb einer Zeichenklasse nicht maskiert
werden
- ein `.', `/', `(', `)' oder `+' muss in einer Zeichenklasse generell nicht
maskiert werden

Allerdings: diese Zeichen müssen hier nicht maskiert werden, man kann es
aber, so dass die zwei Pattern im Endeffekt identisch sind.

Gruß
Carsten