"Unbekannter Modifikator 'g' in ..." bei Verwendung von preg_match in PHP?

90

Dies ist der reguläre Ausdruck, den ich verwenden möchte:

/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim

Ich habe es auf dieser Seite gefunden und es funktioniert großartig, wenn ich es dort ausprobiere. Sobald ich es in meinen Code eingefügt habe, erhalte ich folgende Meldung:

Warning: preg_match() [function.preg-match]: Unknown modifier 'g' in C:\xampp\htdocs\swebook\includes\classes.php on line 22

Kann jemand erklären, was falsch ist und warum es auf dieser Website funktioniert und nicht in meinem Code?

Nike
quelle
1
Wir könnten Ihnen besser helfen, wenn wir genau wüssten, was Sie mit der Regex machen wollten. Und du brauchst bessere Hilfe - oder die Regex jedenfalls. Von all den schlecht geschriebenen E-Mail-Regexen, die auf dieser Site verfügbar sind, haben Sie möglicherweise die schlechteste ausgewählt. : /
Alan Moore
2
Zu Ihrer Information, Ihr regulärer Ausdruck wird diese Art von E-Mails in Ordnung bringen: "-.-.-.--. @ - some--domain--.com" und diese Art von GÜLTIGEN E-Mails wird NICHT validieren: "info @ subdomain. domain.com ". Last but not least ist \ w SEHR GEFÄHRLICH, da PHP preg Perl-kompatible reguläre Ausdrücke und NICHT POSIX wie Javascript verwendet. Wenn PHP auf einem Server ausgeführt wird, der nicht in den USA / Großbritannien lokalisiert ist, stimmt \ w auch mit Buchstaben mit Akzent überein, sodass Sie mit "àèìòù@domain.com" übereinstimmen und eine gültige E-Mail haben. Lesen Sie hier für weitere Details: it.php.net/manual/en/function.preg-replace.php#92443
Marco Demaio

Antworten:

165

Es gibt keinen Modifikator gfür preg_match. Stattdessen müssen Sie die preg_match_allFunktion verwenden.

Also statt:

preg_match("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim", ....)

verwenden:

preg_match_all("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/im", ....)
Codaddict
quelle