znaczacy > comp.lang.* > comp.lang.javascript

Roman Tyczka (12.02.2019, 16:06)
Witam,

Zamarzylo mi sie sprawdzac poprawnosc e-maila, napisalem prosty kod:

....
const reg = new RegExp('^[0-9a-z_.-]+@[0-9a-z.-]+.[a-z]{2,3}$', 'i');
return reg.test(email) == true;

i dzialal, ale wiadomo, ze e-maile bywaja bardziej skomplikowane, wiec
poszukalem "grubszego" regexpa i znalazlem tutaj:



wiec naskrobalem w oparciu o powyzszy wzorzec taki kod:

const reg = new RegExp(
'^(([^<>()[]\\,;:s>()[]\\.,;:s@"]+)' +
'*)|(".+"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.' +
'[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$', 'i');
return reg.test(email) == true;

i ... przestalo dzialac, why?

Z kolei taka modyfikacja:

const reg =
/^(([^<>()\[\]\\,;:\s>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return reg.test(String(email).toLowerCase());

znowu dziala... czego nie ogarniam?
Wojciech Bancer (12.02.2019, 17:06)
On 2019-02-12, Roman Tyczka <noemail> wrote:
> Witam,
> Zamarzyło mi się sprawdzać poprawność e-maila, napisałem prosty kod:


A potem jak w orange.
Najpierw zarejestrowałem sobie maila z końcówką .codes, a potem dodali spradzacza
i już nie mogę na takiego maila się logować.

I na co to komu? :)
Roman Tyczka (12.02.2019, 17:43)
On Tue, 12 Feb 2019 16:06:02 +0100, Wojciech Bancer wrote:

> On 2019-02-12, Roman Tyczka <noemail> wrote:
> A potem jak w orange.
> Najpierw zarejestrowalem sobie maila z koncówka .codes, a potem dodali spradzacza
> i juz nie moge na takiego maila sie logowac.
> I na co to komu? :)


Ok Wojtku, masz absolutna racje! Wlasnie z powodu domen dluzyszych niz 3
znaki chcialem to poprawic.
Ale ja pytam o aspekt softwarowy, z czego wynika zgrzyt?

ps. weryfikacja e-maila sluzy tylko ostrzezeniu ze cos jest nie tak, bez
podania poprawnego nie otrzyma sie na niego oczekiwanych profitów, wiec
imho warto o tym poinformowac na etapie formularzowania... niekoniecznie
cokolwiek blokujac, ale ja nie z orange ;-)
Borys Pogorelo (12.02.2019, 17:59)
Dnia Tue, 12 Feb 2019 16:06:02 +0100, Wojciech Bancer napisal(a):

>> Zamarzylo mi sie sprawdzac poprawnosc e-maila, napisalem prosty kod:

> A potem jak w orange.
> Najpierw zarejestrowalem sobie maila z koncówka .codes, a potem dodali spradzacza
> i juz nie moge na takiego maila sie logowac.


To jeszcze pól biedy, bo dluzsze TLD typu .museum istnieja juz wiele lat i
do wiekszosci to chyba dotarlo. Spróbuj jednak korzytac ze znaku + w czesci
przed "malpa" (ficzer z Gmaila). Chyba praktycznie kazdy popularny regexp
bardziej skomplikowany niz .+@.+\..+ ma z tym problem.

Autorze - nie wymyslaj kola na nowo, wez gotowa biblioteke, która sprawdza
poprawnosc maila zgodnie z RFC. To wcale nie jest trywialne.
Wojciech Bancer (12.02.2019, 19:20)
On 2019-02-12, Roman Tyczka <noemail> wrote:

[...]

>> A potem jak w orange.
>> Najpierw zarejestrowałem sobie maila z końcówką .codes, a potem dodali spradzacza
>> i już nie mogę na takiego maila się logować.
>> I na co to komu? :)

> Ok Wojtku, masz absolutną rację! Właśnie z powodu domen dłużyszych niż 3
> znaki chciałem to poprawić.


I będziesz wspierał potem jak się jeszcze coś zmieni? :P

> Ale ja pytam o aspekt softwarowy, z czego wynika zgrzyt?


Tak na oko:
@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.'
to on się tu spodziewa cyfr 0-9 (jeden do 3 znaków)
potem znowu cyfr od 0 do 9 (jeden do znaków,
a potem jeszcze raz.

Dziwny ten regexp :)
I jak to regexp rozbiera się to ciężko i czyta fatalnie.

> ps. weryfikacja e-maila służy tylko ostrzeżeniu że coś jest nie tak, bez
> podania poprawnego nie otrzyma się na niego oczekiwanych profitów, więc
> imho warto o tym poinformować na etapie formularzowania... niekoniecznie
> cokolwiek blokując, ale ja nie z orange ;-)


Ludzkość wymyśliła na tą okoliczność coś co się nazywa "mail
potwierdzający" z linkiem. :)
Cezary Tomczyk (13.02.2019, 10:12)
On 12/02/2019 16:59, Borys Pogorelo wrote:
> Dnia Tue, 12 Feb 2019 16:06:02 +0100, Wojciech Bancer napisal(a):
> To jeszcze pól biedy, bo dluzsze TLD typu .museum istnieja juz wiele lat i
> do wiekszosci to chyba dotarlo. Spróbuj jednak korzytac ze znaku + w czesci
> przed "malpa" (ficzer z Gmaila). Chyba praktycznie kazdy popularny regexp
> bardziej skomplikowany niz .+@.+\..+ ma z tym problem.
> Autorze - nie wymyslaj kola na nowo, wez gotowa biblioteke, która sprawdza
> poprawnosc maila zgodnie z RFC. To wcale nie jest trywialne.


Kiedys korzystalem z róznych rozwiazan by sprawdzic poprawnosc email
zgodny z RFC, ale poddalem sie, bo co chwila znajdowalem jakis
przypadek, który nie przechodzil walidacji, a powinien :-)

Skonczylo sie to na:

[TypeScript]

public static isValidEmail(email: string): boolean {
const parts = email.split('@');

if (parts.length !== 2) {
return false;
}

if (parts[0].length === 0 || parts[1].length === 0) {
return false;
}

return true;
}
Podobne wątki