Oznámení

Provoz fóra byl ukončen

RegExp.Patterns.php – výraz pro email

před 12 lety

odvarko
Člen | 8

RegExp.Patterns.php

define('TEXY_EMAIL',       '[a-z0-9.+_-]+@[a-z0-9.+_-]+\.[a-z]{2,}');    // name@exaple.com

Zkus si otestovat rychlost tohodle výrazu na následujícím vzorku (a on nemusí být ani tak dlouhý):

str_repeat('abc_def', 5000)

Kdybys ve výrazu omezil počet znaků, myslím že se zpracování velmi zrychlí. Na mém formátovači bylo po podobné úpravě zrychlení obrovské, vlastně to do té doby byl nejpomalejší článek.

Bohužel už nemám zdroj, ale max. délka e-mailové adresy má být 64 + 1 + 255 (64=uživatelská část, 1=zavináč, 255=doména).
Zároveň nejdelší top-level domény jsou šestiznakové. Když se tahle pravidla spojí, mělo by to dát cosi jako:

define('TEXY_EMAIL',       '[a-z0-9.+_-]{1,64}@[a-z0-9.+_-]{1,252}\.[a-z]{2,6}');    // name@exaple.com

252 znaků = 255 – 3 (proto, že se nepočítá top-level doména na konci, která bude mít s tečkou nejméně tři znaky)

před 12 lety

David Grudl
Nette Core | 6806

Dobrý tip, díky!

před 12 lety

Acci
Člen | 83

odvarko: A jak je to potom s doménami třetího řádu?

před 12 lety

odvarko
Člen | 8

Acci psal:
A jak je to potom s doménami třetího řádu?

Nuže, domény třetího řádu se mají zrovnatak vtěsnat do těch 255 znaků. To jsem si domyslel a věřím že je to správně.

Cituji RFC 2821, 4.5.3.1 Size limits and minimums

local-part
   The maximum total length of a user name or other local-part is 64
   characters.

domain
   The maximum total length of a domain name or number is 255
   characters.

před 12 lety

markus
Člen | 11
define('TEXY_EMAIL',       '[a-z0-9.+_-]{1,64}@[a-z0-9.+_-]{1,252}\.[a-z]{2,6}');    // name@exaple.com

This regexp is true even for emails like …___-----_@._-._-._-._-._-._-.zzzyyy

Isn't it an insanity?

Editoval markus (3. 10. 2007 15:02)

před 12 lety

odvarko
Člen | 8

This regexp is true even for emails like …___-----_@._-._-._-._-._-._-.zzzyyy
Isn't it an insanity?

This seems rather like validation, and e-mail validation is (IMHO) not the goal of Texy. Handling just absolutely valid e-mails claims a long (and slow) regular expression. It is possible, of course, to make the regexp more and more complex, but when is the best time to say stop? There are thousands of awfully long regexps just for „strict“ e-mail matching, but I don't think it is necessary to build such ones into Texy. Let David correct me if I'am wrong.