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
Maar hij laat weer heinz@köln.de liggen, vanwege de ö


Ik snap niet waarom hij dat e-mailadres doorlaat.. Want het deel wat ná @ staat bevat ook karakters die wél matchen en de voorwaarde is toch "one of" (zie Regexper). Kun je dat uitleggen?
[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}

en dan proberen te matchen met heinz@köln.de

Het stuk voor de @ is ok.
De @ zelf ook.

Daarna zoekt de regex naar 1 of meer karakters uit de reeks a-z0-9 een punt of een -

Daar vinden we er 1. namelijk de k.
De ö maakt geen deel uit van a-z.

Dus daar zou de match stoppen. Maar de regex wil ook nog een punt gevolgd door een extensie van 2 tot 64 karakters hebben.

Maar door de ö komt hij daar niet.

En toegegeven, de letters met diakrieten worden niet veel gebruikt in domeinnamen of emailadressen, maar technisch kan het wel.

Daarom zou ik het overlaten aan niet zelf geschreven tools.
Hoi Ivo,

Bedankt voor je uitleg.
Dat die stopt omdat de ö er niet in voorkomt had ik echt niet verwacht, omdat andere karakters dus wel matchen. Ik ging ervan uit dat tenminste 1 karakter moet matchen. Maar goed, zo werkt het blijkbaar.

Guido
Eens kijken hoe dit forum omgaat met niet-latijnse tekensets.
En hoe browsers er mee omgaan.

https://en.wikipedia.org/wiki/??

https://en.wikipedia.org/wiki/.%D1%80%D1%84

The Cyrillic letters ?? stand for ?????????? ????????? (transliterated as Rossijskaja Federacija / Rossiyskaya Federatsiya), the Russian Federation. The domain has an ASCII representation of xn--p1ai derived as Punycode for use in the Domain Name System.

https://en.wikipedia.org/wiki/Punycode

[size=xsmall]Toevoeging op 23/01/2024 21:50:38:[/size]

Niet dus.
Het forum gaat er niet lekker mee om, helaas.
Ik ga kijken of het eenvoudig te fixxen is.
Die bug op phphulp zit er pas een jaar of 10+ in...
Hoi Ivo,

Maar hij laat weer heinz@köln.de liggen, vanwege de ö


FILTER_VALIDATE_EMAIL laat dit (umlaud) ook doorgaan.

Guido

Reageren