Goedemiddag,

Ik wil bepalen of een blok tekst (de message body van een e-mail) een e-mailadres bevat. Daarvoor gebruik ik:

preg_match("/\b[^\s]+@[^\s]+/", $mijn_tekst)


de bron is hier te vinden.

Werkt prima. Graag jullie mening, is dit een prima snippet?

Guido
Vertaald kom je uit op deze pattern.
Klik
Bedankt, handige link voor mij.
Deze reguliere expressie zoekt dus alleen op de aanwezigheid van een @ met direct daarvoor en direct daarna tekst. Als je een meer nauwkeurige manier weet om de aanwezigheid van een e-mailadres te bepalen, laat het me weten.. :-)
Thanks! De Swift versie lijkt me wel wat, maar kun je me uitleggen wat de \ vóór de domein extensie doet?

[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}


Guido
Die slash lijkt mij een fout.
Een escaping karakter?

Iets anders, ik zie dat je een beheerder bent. Ik kan deze site via een onbeveiligde (http) verbinding bereiken, en inloggen. Wordt dit ooit gefixt?

Guido
Guido - op 21/01/2024 11:00:57

Een escaping karakter?

Iets anders, ik zie dat je een beheerder bent. Ik kan deze site via een onbeveiligde (http) verbinding bereiken, en inloggen. Wordt dit ooit gefixt?

Guido

Ik ga er even met Bas naar kijken.

Op mijn PC is HTTPS geforceerd, op mijn iPhone kan ik de site nog bereiken met HTTP. Dat is wel vreemd.

Guido
Ik ga het eens uitzoeken.
volgens mij pakt de regex

 [A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64} 


ook een deel van http://username:[email protected] mee.
Maar hij laat weer heinz@köln.de liggen, vanwege de ö

Om van obscure varianten met een spatie in het deel voor de @ maar te zwijgen:

"ivo p"@phphulp.nl zou een valide adres moeten zijn.

ik zou hem zo benaderen:

gebruik preg_match om elk woord met een @ erin te vinden.
Deze "woorden" zou ik dan aan filter_var() voeren met FILTER_VALIDATE_EMAIL en PHP het moeilijke werk laten doen.

https://www.php.net/manual/en/filter.filters.validate.php

Reageren