🚀 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 14:06
JS i regex
#52002
Author: Roman Tyczka
Date: Tue, 12 Feb 2019 14:06
34 lines
1734 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
#52005
Author: Wojciech Bancer
Date: Tue, 12 Feb 2019 15:06
14 lines
1168 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
#52006
Author: Roman Tyczka
Date: Tue, 12 Feb 2019 15:43
25 lines
1707 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
#52009
Author: Borys Pogoreło
Date: Tue, 12 Feb 2019 15:59
19 lines
1631 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
#52008
Author: Wojciech Bancer
Date: Tue, 12 Feb 2019 17:20
37 lines
2099 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
#52010
Author: Cezary Tomczyk
Date: Wed, 13 Feb 2019 08:12
42 lines
2448 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