#1 8. 8. 2007 14:10

odvarko
Nový člen
Registrovaný: 6. 3. 2007
Příspěvky: 8
Web

RegExp.Patterns.php – výraz pro email

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)

Offline

 

#2 8. 8. 2007 14:39

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 4050
Web

Re: RegExp.Patterns.php – výraz pro email

Dobrý tip, díky!

Offline

 

#3 8. 8. 2007 16:10

Acci
Člen
Místo: Újezd
Registrovaný: 6. 4. 2005
Příspěvky: 79
Web

Re: RegExp.Patterns.php – výraz pro email

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

Offline

 

#4 8. 8. 2007 17:34

odvarko
Nový člen
Registrovaný: 6. 3. 2007
Příspěvky: 8
Web

Re: RegExp.Patterns.php – výraz pro email

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.

Offline

 

#5 3. 10. 2007 15:01

markus
Člen
Registrovaný: 1. 10. 2007
Příspěvky: 11

Re: RegExp.Patterns.php – výraz pro email

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)

Offline

 

#6 8. 10. 2007 23:08

odvarko
Nový člen
Registrovaný: 6. 3. 2007
Příspěvky: 8
Web

Re: RegExp.Patterns.php – výraz pro email

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.

Offline

 

Zápatí

Reklama: Školení PHP | Magento