Regulärer Ausdruck
T. Collins
- php
Einen wunderschönen guten Morgen!
um zu testen, ob die Zeichen, die bei der Eingabe einer E-Mail-Adresse verwendet wurden, gültig sind, hatte ich folgenden regulären Ausdruck verwendet:
if (eregi("[^a-z0-9_-.@]",$mem_email) {
MECKERMELDUNG
}
Funktionierte alles prima, bis auf die Verwendung des Minuszeichens:
My_Email@my-example.com wurde nicht akteptiert, My_Email@example.com hingegen schon.
Bis ich den Ausdruck umgestellt habe:
eregi("[^a-z0-9_.@-]",$mem_email)
Kann mir jemand erklären, warum die Position von - eine Rolle spielt?
Ach ja: ich arbeite nur sehr selten mit regulären Ausdrücken und bin da nicht sehr fit.
Grüße
T. Collins
if (eregi("[^a-z0-9_-.@]",$mem_email) {
eregi("[^a-z0-9_.@-]",$mem_email)Kann mir jemand erklären, warum die Position von - eine Rolle spielt?
"-" ist ein Rangeoperator in einer Zeichenklasse, ausser der Context lässt eine Interpretation als Range nicht zu. Das ist eigentlich nur dann garantiert gegeben, wenn das Zeichen am Ende der Zeichenklasse steht.
mfg Beat
Hi Beat,
klingt logisch. Was mich wundert ist, dass das "-" trotz der Maskierung noch als Rangeoperator interpretiert wird und dass in vielen Dokumentationen - nicht am Ende des Ausdrucks steht.
Danke für Antwort.
Grüße
T. Collins
Was mich wundert ist...
PCRE = Wunder geschehen.
Perl
"-" =~ /[a-z]/ and print "success";
#success
mfg Beat
Hi,
klingt logisch. Was mich wundert ist, dass das "-" trotz der Maskierung noch als Rangeoperator interpretiert wird und dass in vielen Dokumentationen - nicht am Ende des Ausdrucks steht.
Du hast vergessen, dass Du Deine Regular Expression noch in einen String-Kontext gebracht hast. Dort ist der Backslash ein Sonderzeichen und muss folglich maskiert werden. Dies hast Du vergessen; entsprechend verblieb in der RegExp nur das "-".
Cheatah
Hi,
Was mich wundert ist, dass das "-" trotz der Maskierung noch als Rangeoperator interpretiert wird [...]
Du hast vergessen, dass Du Deine Regular Expression noch in einen String-Kontext gebracht hast. Dort ist der Backslash ein Sonderzeichen und muss folglich maskiert werden. Dies hast Du vergessen; entsprechend verblieb in der RegExp nur das "-".
Wenn also - in einem Regulären Ausdruck dem - die Bedeutung als Range Operator nimmt - wie notiere ich dann eigentlich den Wunsch nach einer Range von \ bis irgendwas ...?
MfG ChrisB
Hello,
Wenn also - in einem Regulären Ausdruck dem - die Bedeutung als Range Operator nimmt - wie notiere ich dann eigentlich den Wunsch nach einer Range von \ bis irgendwas ...?
mit escaptem Backslash?
" [\\-'] "
oder
' [\-'] '
würde ich mal annehmen...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg