Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Pytanie do wyrażenia regularnego, max długość
gauss
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 11.11.2008

Ostrzeżenie: (0%)
-----


Cześć. Mam proste wyrażenie regularne sprawdzające poprawność maila:

/^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$/

Chciałbym się dowiedzieć czy można do niego dodać warunek, który sprawdzi długość całego maila np. żeby max mógł wynosić 255 znaków? Jeżeli tak to jak to zrobić?

Wiem, że mogę sobie osobno wywołać funkcję strlen(), ale chciałbym to zawrzeć w wyrażeniu regularnym i w ogóle ciekawi mnie to czy można.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Kod
{2,4}

Dowiedz się, co oznaczają te nawiasy. [;
Go to the top of the page
+Quote Post
blooregard
post
Post #3


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
Dowiedz się, co oznaczają te nawiasy. [;

Wiesz, jestem ciekaw, jakbyś to rozwiązał z całym wyrażeniem, bo ja zrobiłem próbę z tym zakresem i nie zadziałało:

/(^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$){,255}/
Go to the top of the page
+Quote Post
gauss
post
Post #4





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 11.11.2008

Ostrzeżenie: (0%)
-----


Wiem co oznaczają.
Go to the top of the page
+Quote Post
MateuszS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Jak ten mail jest zapisywany do bazy to ogranicz tam liczbe znakow do 255. Warunek ograniczysz do sprawdzenia czy zapytanie zostalo wyslane.

if(!zapytanie) {
echo 'OMG!!!!';
}
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Blah, zagalopowałem się... (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Kod
/(^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$){,255}/

Trzeba by było wpisać 255 maili obok siebie...

Cytat
Wiem, że mogę sobie osobno wywołać funkcję strlen(), ale chciałbym to zawrzeć w wyrażeniu regularnym i w ogóle ciekawi mnie to czy można.

Nie bardzo, napisałem wyżej; sprawdzanie długości zeżre zasoby, ale jest inny sposób:
  1. <?php
  2. if(preg_match('/^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$/si', $mail) && !isset($mail{255})){
  3.   //prawidlowy
  4. }
  5. ?>
Go to the top of the page
+Quote Post
gauss
post
Post #7





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 11.11.2008

Ostrzeżenie: (0%)
-----


No spoko. Jak sie nie da w wyrażeniu regularnym to trudno. Tylko z polem e-mail miałem problem. W innych polach (kod pocztowy itp) łatwo wszystko sprawdziłem jednym wyrażeniem regularnym bez innych funkcji - w tym długość, poprawność, niedozwolone znaki też. Czy nie powinno się tak robić? Dużo zasobów traci się na sprawdzaniu długości za pomocą wyrażeń (zakładając że ktoś specjalnie wyśle bardzo długi ciąg znaków)? Czy może to nie jest bardzo istotne?
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
w tym długość, poprawność, niedozwolone znaki też.

No tak, bo w tamtych polach masz tak jakby "bloki" stałej długości (np. kod pocztowy 2 znaki, 3 znaki)

Cytat
Dużo zasobów traci się na sprawdzaniu długości za pomocą wyrażeń (zakładając że ktoś specjalnie wyśle bardzo długi ciąg znaków)?

To tak, jak podałem; jeśli ma być konkretna długość, to sprawdzasz:
  1. <?php
  2. if(isset($mail{256})){
  3.   // zuo
  4. }
  5. ?>

AFAIK, to najszybszy sposób sprawdzenia, czy ciąg jest dłuższy niż ustalony.

A z wyrażeń powinno się korzystać wówczas, gdy nie ma innej możliwości sprawdzenia zawartości ciągu.
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Do sprawdzenia poprawności maila chyba lepiej użyć filter_var" title="Zobacz w manualu PHP" target="_manual? Btw: adres mail w teorii może mieć więcej niż 255 znaków. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
blooregard
post
Post #10


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
Btw: adres mail w teorii może mieć więcej niż 255 znaków.


Uściślając: 64 znaki nazwy uzytkownika (przed małpką) oraz 255 znaków tworzących domenę (po małpce) + małpka = 320 znaków.

Żródło: RFC2821 (SMTP, z 2001 roku, które zastąpiło starsze RFC821, gdzie adres mógł mieć odpowiednio 64+64 znaki)

Cytat
(...)
There are several objects that have required minimum/maximum sizes.
Every implementation MUST be able to receive objects of at least
these sizes. Objects larger than these sizes SHOULD be avoided when
possible. However, some Internet mail constructs such as encoded
X.400 addresses [16] will often require larger objects: clients MAY
attempt to transmit these, but MUST be prepared for a server to
reject them if they cannot be handled by it. To the maximum extent
possible, implementation techniques which impose no limits on the
length of these objects should be used.

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.
(...)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.09.2025 - 09:44