regulärer Ausdruck

Hallo,

in einem Formular möchte ich das Feld „Name“ prüfen. Mein regulärer Ausdruck sieht so aus:
„/[“/]+/"
Der soll also die Anführungszeichen als ungültige Zeichen marken.
Als Rückmeldung wird die Eingabe wieder übergeben und im Formularfeld dargestellt. Dabei werden alle Slashes per stripslashes() entfernt, da sonst ein eingegebener / verdoppelt wird. Alle Zeichen werden bei der erneuten Formularausgabe angezeigt, nur die " nicht. Ich möchte die " natürlich auch wieder im Formularfeld sehen. Warum werden die nicht angezeigt?

Vielen Dank!
Chris

Hallo,

in einem Formular möchte ich das Feld „Name“ prüfen. Mein
regulärer Ausdruck sieht so aus:
„/[“/]+/"
Der soll also die Anführungszeichen als ungültige Zeichen
marken.
Als Rückmeldung wird die Eingabe wieder übergeben und im
Formularfeld dargestellt. Dabei werden alle Slashes per
stripslashes() entfernt, da sonst ein eingegebener /
verdoppelt wird. Alle Zeichen werden bei der erneuten
Formularausgabe angezeigt, nur die " nicht. Ich möchte die "
natürlich auch wieder im Formularfeld sehen. Warum werden die
nicht angezeigt?

entweder hast du sie a) raus-ersetzt. oder b) in der ausgabe nicht maskiert.
a) steht in deinem php-quelltext
b) steht in deinem nicht interpretierten browser-quelltext.

Hi Chris,

kenne reguläre Ausdrücke erst seit kurzem, aber wieso maskierst du die Anführungszeichen? Dachte, dass man nur folgende Zeichen maskieren muss:
*. * + ? , *
Und nimm als Delimiter die Tilde (~) :smile:

Ciao Frosti

Hallo!

aber wieso maskierst du die Anführungszeichen?

Vermutlich (habe keine Ahnung von PHP) weil der String selbst in eben Anführungszeichen eingeschlossen ist.

Dachte, dass man nur folgende Zeichen maskieren muss:
*. * + ? , *

In den eckigen Klammeren müssen fast alle Sonderzeichen nicht maskiert werden, weil sie dort eh ihre Sonderbedeutung verlieren.

Gruß, Jan

Doch! :wink:
Hi JayVee,

der . für einfach alles stehen kann=> deshalb maskiert!
der * sagt, dass das vorangegangene Element null mal oder öfter vorkommen muss!
das + sagt, dass das vorangegangen Element mindestens einmal enthalten sein muss!
keine Ahnung, warum man das , maskieren muss(ist aber so :wink: )
und den Backslash, da er Sonderfunktionen hat, wie z.B.
\S => Alle nicht Leerzeichen
Ein regulärer Ausdruck hat immer Anführungszeichen (" oder ') am Anfang und Ende, darauf folgt der Delimiter(1x Anfang, 1x Ende), der in dem ganzem Ausdruck maskiert werden muss, deshalb Tilde nehmen, da sie fast nie in dem Ausdruck vorkommt! Müsste soweit stimmen, oder?

Ciao Frosti

Hallo!

der . für einfach alles stehen kann=>
deshalb maskiert!

Aber nicht in eckigen Klammern, sprich in Zeichenklasssen. Da wäre das sinnfrei.

der * sagt, dass das vorangegangene Element
null mal oder öfter vorkommen muss!

dito.

das + sagt, dass das vorangegangen Element
mindestens einmal enthalten sein muss!

dito.

keine Ahnung, warum man das , maskieren
muss(ist aber so :wink: )

Ich kenne keine RE-Implementierung, bei der das Komma eine Sonderbedeutung hat, muss aber nichts heißen.

und den Backslash, da er Sonderfunktionen hat, wie z.B.
\S => Alle nicht Leerzeichen

Richtig (Whitespaces wäre etwas genauer). Deswegen schrieb ich „fast alle“.

Ein regulärer Ausdruck hat immer Anführungszeichen (" oder ')

Aber ist es bei PHP nicht notwendig, dass in einem Stringliteral, das mit doppelten Anführungszeichen gebildet wird, ein doppeltes Anführungszeichen im String maskiert werden muss?

Gruß, Jan

Puh,

danke erstmal für die vielen Antworten, ich muss diesen Input erstmal verarbeiten! Melde mich dann nochmal mit der Lösung.

Gruß
Chris