Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

preg_match() , Unknown modifier '(' in

1 view
Skip to first unread message

Kai Schuster

unread,
Dec 22, 2009, 9:45:24 AM12/22/09
to
Hallo, habe folgenden Code:

"...
$var = test-1.m...@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

unread,
Dec 22, 2009, 9:55:48 AM12/22/09
to
Kai Schuster schrieb:

> if(!preg_match("|$pattern|", $value[2])) {

Es heisst hier auch '$var' und nicht $value[2].

Karl Pflästerer

unread,
Dec 22, 2009, 10:36:25 AM12/22/09
to
Kai Schuster <kai.sc...@gmx.net> writes:

> Hallo, habe folgenden Code:
>
> "...
> $var = test-1.m...@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 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

unread,
Dec 22, 2009, 11:08:18 AM12/22/09
to
Kai Schuster schrieb:

> $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})?)$';

...


> 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])) {

>
> 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


> 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 nerd...@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

unread,
Jan 5, 2010, 9:28:31 PM1/5/10
to
> $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>";
> }

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.

0 new messages