Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pytanie do wyrażenia regularnego
Forum PHP.pl > Forum > Przedszkole
gauss
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.
erix
Kod
{2,4}

Dowiedz się, co oznaczają te nawiasy. [;
blooregard
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}/
gauss
Wiem co oznaczają.
MateuszS
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!!!!';
}
erix
Blah, zagalopowałem się... 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. ?>
gauss
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?
erix
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.
Crozin
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. biggrin.gif
blooregard
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.
(...)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.