Discussion:
preg_match() , Unknown modifier '(' in
(zu alt für eine Antwort)
Kai Schuster
2009-12-22 14:45:24 UTC
Permalink
Hallo, habe folgenden Code:

"...
$var = test-***@mail.de

$pattern =
'^([\w\d\-\.]+)@{1}(([\w\d\-]{1,67})|([\w\d\-]+\.[\w\d\-]{1,67}))\.(([a-zA-Z\d]{2,4})(\.[a-zA-Z\d]{2})?)$';

if(!preg_match("|$pattern|", $value[2])) {
echo "<h4>Emailadresse [$var] nicht korrekt.</h4>";
}
..."


preg_match("|$pattern|", $var) ist false. Ich erhalte folgende
Fehlermeldung.

Warning: preg_match() [function.preg-match]: Unknown modifier '(' in

Ich habe schon ein bisschen gegoogelt, etwas mit Delimiter gefunden,
aber nicht wie. Ich erhalte diese Fehlermeldung nur bei Emailadressen.

Kann mir jemand helfen?
Gruß Kai
Kai Schuster
2009-12-22 14:55:48 UTC
Permalink
Post by Kai Schuster
if(!preg_match("|$pattern|", $value[2])) {
Es heisst hier auch '$var' und nicht $value[2].
Karl Pflästerer
2009-12-22 15:36:25 UTC
Permalink
Post by Kai Schuster
"...
$pattern =
^^^
Post by Kai Schuster
if(!preg_match("|$pattern|", $value[2])) {
echo "<h4>Emailadresse [$var] nicht korrekt.</h4>";
}
..."
preg_match("|$pattern|", $var) ist false. Ich erhalte folgende
Fehlermeldung.
Warning: preg_match() [function.preg-match]: Unknown modifier '(' in
Ich habe dir die Ursache unterstrichen. Du hast `|' in deiner regexp und
als Begrenzer; das passt nicht.

BTW bei obigem Ausdruck wäre ein x (PCRE_EXTENDED) als modifier durchaus
hilfreich.
KP
Sam Kang
2009-12-22 16:08:18 UTC
Permalink
Post by Kai Schuster
$pattern =
...
Post by Kai Schuster
Warning: preg_match() [function.preg-match]: Unknown modifier '(' in
Ahh copy and pray ging mal weider nicht?

Du nimmst das | als Delimiter, d.h. das Patteren ist nach dem nächstem | (hier
oder) zu Ende.

nimm '/' statt '|' und es funktioniert. Also

preg_match("/$pattern/", $value[2])) {
Post by Kai Schuster
Ich habe schon ein bisschen gegoogelt, etwas mit Delimiter gefunden,
Falsche Quelle. Hier steht alles:

http://www.php.net/manual/de/reference.pcre.pattern.syntax.php
Post by Kai Schuster
aber nicht wie. Ich erhalte diese Fehlermeldung nur bei Emailadressen
Was willst du denn filtern? Email Addressen bestimmt nicht.

([\w\d\-\.]+)@{1}

Vor dem @ dürfen zeichen,Zifffern Punkt und minus stehen, manche haben das
aber auch Unterstreiche.

(
([\w\d\-]{1,67})|
([\w\d\-]+\.[\w\d\-]{1,67})
)\.

Ah ein Domainname mit 1-67 Zeichen.
oder ein Domainname ohne Längenbegrenzung, ein Punkt dann wieder ein
Domainname mit 1-67 Zeichen und einem Punkt.

(
([a-zA-Z\d]{2,4})
(\.[a-zA-Z\d]{2})?
)

Jetzt erwartest du 2-4 alphanumerische Zeichen, dann einen Punkt und nochmals
einem Punkt mit genau 2 alphanumerische Zeichen falls vorhanden.

Und nu? Manche Studies haben sowas ***@fb1.fak2.uni.hinterm-wald.edu.au

Was ist mit denen?

Emails mit regex testen ist und war nie eine gute Idee, oder Überleg dir wen
du aussperren möchtest.

Sam
--
Sufficiently advanced incompetence is indistinguishable from malice
(J. Porter Clark)
Andreas Treichel
2010-01-06 02:28:31 UTC
Permalink
Post by Kai Schuster
$pattern =
if(!preg_match("|$pattern|",
Post by Kai Schuster
$value[2])) {
echo "<h4>Emailadresse [$var] nicht korrekt.</h4>";
}
Alternativ gibts zum einfachen prüfen von E-Mail-Adressen auch
$email = filter_var($email, FILTER_VALIDATE_EMAIL);

Damit sparst du dir lange und fehleranfällige reguläre Ausdrücke.
Loading...