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

JS i regex

7 views
Skip to first unread message

Roman Tyczka

unread,
Feb 12, 2019, 9:06:12 AM2/12/19
to
Witam,

Zamarzyło mi się sprawdzać poprawność e-maila, napisałem prosty kod:

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

i działał, ale wiadomo, że e-maile bywają bardziej skomplikowane, więc
poszukałem "grubszego" regexpa i znalazłem tutaj:

https://emailregex.com/

więc naskrobałem w oparciu o powyższy 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 ... przestało działać, 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 działa... czego nie ogarniam?

--
pozdrawiam
Roman Tyczka

Wojciech Bancer

unread,
Feb 12, 2019, 10:06:05 AM2/12/19
to
On 2019-02-12, Roman Tyczka <noe...@because.no> 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? :)

--
Wojciech Bańcer
wojciec...@gmail.com

Roman Tyczka

unread,
Feb 12, 2019, 10:43:07 AM2/12/19
to
On Tue, 12 Feb 2019 16:06:02 +0100, Wojciech Bancer wrote:

> On 2019-02-12, Roman Tyczka <noe...@because.no> 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? :)

Ok Wojtku, masz absolutną rację! Właśnie z powodu domen dłużyszych niż 3
znaki chciałem to poprawić.
Ale ja pytam o aspekt softwarowy, z czego wynika zgrzyt?

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

--
pozdrawiam
Roman Tyczka

Borys Pogoreło

unread,
Feb 12, 2019, 11:01:59 AM2/12/19
to
Dnia Tue, 12 Feb 2019 16:06:02 +0100, Wojciech Bancer napisał(a):

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

To jeszcze pół biedy, bo dłuższe TLD typu .museum istnieją już wiele lat i
do większości to chyba dotarło. Spróbuj jednak korzytać ze znaku + w części
przed "małpą" (ficzer z Gmaila). Chyba praktycznie każdy popularny regexp
bardziej skomplikowany niż .+@.+\..+ ma z tym problem.

Autorze - nie wymyślaj koła na nowo, weź gotową bibliotekę, która sprawdza
poprawność maila zgodnie z RFC. To wcale nie jest trywialne.

--
Borys Pogoreło
borys(#)leszno,edu,pl

Wojciech Bancer

unread,
Feb 12, 2019, 12:20:44 PM2/12/19
to
On 2019-02-12, Roman Tyczka <noe...@because.no> 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. :)

--
Wojciech Bańcer
wojciec...@gmail.com

Cezary Tomczyk

unread,
Feb 13, 2019, 3:12:26 AM2/13/19
to
Kiedyś korzystałem z różnych rozwiązań by sprawdzić poprawność email
zgodny z RFC, ale poddałem się, bo co chwila znajdowałem jakiś
przypadek, który nie przechodził walidacji, a powinien :-)

Skończyło się 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;
}

--
Cezary Tomczyk
http://www.ctomczyk.pl/
0 new messages