🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
6 messages
6 total messages Started by Roman Tyczka Tue, 12 Feb 2019 15:06
JS i regex
#50510
Author: Roman Tyczka
Date: Tue, 12 Feb 2019 15:06
33 lines
979 bytes
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
Re: JS i regex
#50511
Author: Wojciech Bancer
Date: Tue, 12 Feb 2019 16:06
13 lines
355 bytes
On 2019-02-12, Roman Tyczka <noemail@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
wojciech.bancer@gmail.com
Re: JS i regex
#50512
Author: Roman Tyczka
Date: Tue, 12 Feb 2019 16:43
24 lines
869 bytes
On Tue, 12 Feb 2019 16:06:02 +0100, Wojciech Bancer wrote:

> On 2019-02-12, Roman Tyczka <noemail@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
Re: JS i regex
#50513
Author: Borys =?utf-8?Q?
Date: Tue, 12 Feb 2019 16:59
18 lines
797 bytes
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
Re: JS i regex
#50514
Author: Wojciech Bancer
Date: Tue, 12 Feb 2019 18:20
36 lines
1133 bytes
On 2019-02-12, Roman Tyczka <noemail@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
wojciech.bancer@gmail.com
Re: JS i regex
#50515
Author: Cezary Tomczyk
Date: Wed, 13 Feb 2019 09:12
41 lines
1380 bytes
On 12/02/2019 16:59, Borys Pogoreło wrote:
> 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.

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/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads