Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 12

Temat: Wyrażęnia regulane - walidacja adresu e-mail

  1. #1
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie Wyrażęnia regulane - walidacja adresu e-mail

    Zna ktoś dobre wyrażenie regularne na walidację adresu e-mail?

    Te które znajduje w sieci to jakaś porażka, albo odrzucają poprawne adresy ze względu na złe zakresy klas znaków, albo nie waliduja długości:

    cytat z wiki
    The local-part of an email address may be up to 64 characters long and the domain name may have a maximum of 253 characters. However, the maximum length of a forward or reverse path length of 256 characters restricts the entire email address to be no more than 254 characters.[1] Some mail protocols, such as X.400, may require larger objects, however. The SMTP specification recommends that software implementations impose no limits for the lengths of such objects.
    potrzebuje wyrazenia ktore przewaliduje to co przed @ (local -part) ze wzgledu na dozwolone znaki i dlugosc, jak rowniez to co po @ (domain) ze wzgledu na dlugosc calosci oraz dlugosc tld {2,4}
    a na końcu całość ze względu na długość, tj. do 254 jeśli dobrze rozumiem to co w cytacie.

    Ktos napisze to lepiej?

    // P.S
    czy znak ^ jest dozwolony?
    Ostatnio edytowane przez lame : 12-02-2010 - 21:08
    światło mądrości oświetla drogę z nikąd do nikąd

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    regex w jakim jezyku?!

    Ja jestem leniwy i w perlu uzywam modulu Validate::Email (debian pakiet libdata-validate-email-perl) i on mi zwraca czy adres ma poprawny format czy nie... ale nie sprawdza czy domena nadawcy istnieje itd... wiec to trzeba sobie dopisac... tak czy inaczej lapie takie literowki jak spacje, niedozwolone znaki albo brak tych wymaganych

    Ciekawy i przydatny watek jest tez na regex to validate e-mail addresses and phone numbers.
    Ostatnio edytowane przez TQM : 12-03-2010 - 09:31
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    Sep 2006
    Postów
    1,227

    Domyślnie

    Jest od tego rfc 2822.
    Kod:
    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
    źródło: How to Find or Validate an Email Address
    zapytanie google: email address specification regex

    ... ale to nie znaczy, że będzie działało ze wszystkimi serwerami mail. Miej to też na uwadze.

    PS. Nie cytuj wikipedii. Opieraj swoją wiedzę (i decyzje) tylko i wyłącznie na rzetelnych źródłach.

  4. #4
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie

    Cytat Napisał tqm Zobacz post
    regex w jakim jezyku?!
    pcre

    Cytat Napisał TQM Zobacz post
    Ciekawy i przydatny watek jest tez na regex to validate e-mail addresses and phone numbers.
    Nie widze nic co waliduje długość adresu

    Cytat Napisał Mad_Dud Zobacz post
    Jest od tego rfc 2822.
    Nic z tego nie rozumiem, moze ktoś wyjaśni jak to czytać?
    Ponadto nie widze ani słowa o dopuszczalnej długości adresu.
    Wychodzi na to że wikipedia jest nierzetelna bo zawiera informacje których nie ma w rfc, a jeśli w rfc te informacje są, to trzeba ich długo szukać, bo dotyczą formatu URL, gdzies.. tam.. hen daleko...


    Cytat Napisał Mad_Dud Zobacz post
    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(??:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(??:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
    To wyrażenie nie walduje długości...
    Wykrywanie adresów IP w domenie nie jest mi potrzebne, a z tego co widze to wyrazenie tego próbuje
    (?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f]) co to robi?

    ---------------------

    Skrypt musi działać w PHP

    Kod php:

    <?php

    $patt 
    'regex_here';
    $email '[email protected]';

    echo 
    preg_match($patt$email);

    ?>
    Pytanie:
    Jaką rolę w wyrażeniach pełni ciąg: '?:'


    W pierwszym poście napisałem ze chodzi mi o walidację adresu w tym jego długości,
    wasza pomoc sprowadza się jak narazie do bezmyślnego wklejania wyrażeń które tego nie robią,
    ogarnijcie się zdeczka...
    Ostatnio edytowane przez lame : 12-03-2010 - 16:24
    światło mądrości oświetla drogę z nikąd do nikąd

  5. #5
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Kod:
    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(??:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(??:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
    Dla mnie to wyglada jak regex perlowy (PCRE - Perl Compatible Regular Expression) i to kiepsko napisany... mozna go uproscic i funkcjonalnie miec to samo...

    @ zaznaczylem boldem aby bylo widac co musi zawierac nazwa usera - wg RFC dopuszczalne znaki w username to zakresami podane a do z, 0 do 9 oraz !#$%&'*+/=?^_`{|}~- (tak tak, kiedys znakow jak % i ! uzywalo sie w adresach ale nikt tutaj pewnie o UUCP i innych zabytkach nie slyszal)
    ; dlatego te znaki sa w RFC).

    Podobnie kwestia ma sie z nazwa hosta/domeny ale nie dopuszcza sie tam ! % i wiekszosci tego co wolno wcisnac w nazwe usera... Tak czy inaczej ten regex nie przewiduje jednej rzeczy - domen zapisanych w UTF8 ;-) wiec i tak ma to juz niewielkie znaczenie

    przykladowy regex zawiniety w program:
    Kod:
    #!/usr/bin/perl
    @addrs = qw/
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    [email protected]
    
    [email protected]@not.working.com
    [email protected]!ng.com
    /;
    
    foreach $a (@addrs) {
    	print verify($a)."\n" if verify($a);
    }
    
    sub verify {
    	my ($user,$domain) = ($_[0] =~ /([a-z0-9!#$%&'*+\/=?^_`{|}~-]+)@(([a-z0-9_\-]+\.)+[a-z0-9]{2,})/i);
    	($user and $domain) ? return $_[0] : return undef;
    }
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  6. #6
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie

    Mój system walidacji w uproszczeniu opiera się o statyczny plik z wzorcami wyrażen,
    kiedy musze przewalidować input, pobieram odpowiedni wzorzec, dopasowuje i wiem czy dane wejściowe są poprawne,
    nie chce komplikowac tej koncepcji, dlatego wszystko musi siedzieć w jednym i tylko jedynym wyrażeniu.

    Jakie znaczenie ma kodowanie w jakim zapisana jest domena?
    Wyrażenie NIE MA wpuszczać domen z polskimi krzakami, ma je odrzucać!


    Zatem długość powinna być następująca:

    (1,[email protected],253)6,254

    czyli:

    username: od 1 do 64
    domena: od 4 do 253
    całość: od 6 do 254

    Czy dobrze rozumuje?


    // P.S

    Co w wyrażeniu robi
    (?:)


    // P.S.2

    Czy ma znaczenie jaki znak w username stoi na poczatku zy końcu, innymi slowy czy sa znaki od ktorych nie moze zaczynac sie username, np. ! czy ^ ? Czy może panuje tutaj pełna dowolność?
    Ostatnio edytowane przez lame : 12-03-2010 - 17:13
    światło mądrości oświetla drogę z nikąd do nikąd

  7. #7
    Zarejestrowany
    Sep 2006
    Postów
    1,227

    Domyślnie

    Cytat Napisał lame Zobacz post
    W pierwszym poście napisałem ze chodzi mi o walidację adresu w tym jego długości,
    wasza pomoc sprowadza się jak narazie do bezmyślnego wklejania wyrażeń które tego nie robią,
    ogarnijcie się zdeczka...
    Mam dosyć takiej arogancji. Zacznij czytać ze zrozumieniem, co ludzie do ciebie piszą, bo aktualnie skutecznie zniechęcasz mnie (i kilka innych osób) do udzielenia tobie pomocy.

    Kod:
    The maximum total length of a reverse-path or forward-path is 256 characters
    RFC 5321 - Simple Mail Transfer Protocol

  8. #8
    Zarejestrowany
    Nov 2009
    Postów
    643

    Thumbs up

    Cytat Napisał Mad_Dud Zobacz post
    Mam dosyć takiej arogancji. Zacznij czytać ze zrozumieniem, co ludzie do ciebie piszą, bo aktualnie skutecznie zniechęcasz mnie (i kilka innych osób) do udzielenia tobie pomocy.
    Skoro masz dosyć to najzwyczajniej w świecie ignoruj moje tematy, nie wypowiadaj się w nich, w ogóle ich nie otwieraj.
    A ewentualne decyzje o ich usuwaniu którymi na marginesie sypiesz bez opamiętania pozostaw innym moderatorom.

    hit the tree broa



    4.5.3.1.1. Local-part

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

    4.5.3.1.2. Domain

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

    4.5.3.1.3. Path

    The maximum total length of a reverse-path or forward-path is 256
    octets (including the punctuation and element separators).

    Czyli ile wynosi maksymalna długość? 254, 255 czy 256?
    Ostatnio edytowane przez lame : 12-03-2010 - 17:36
    światło mądrości oświetla drogę z nikąd do nikąd

  9. #9
    Zarejestrowany
    Sep 2006
    Postów
    1,227

    Domyślnie

    Local-path to jan w przykładzie [email protected]
    domain to kowalski.com w przykładzie [email protected]

    64 + 255 + 1 = 320
    1 to at (@)
    Ostatnio edytowane przez Mad_Dud : 12-03-2010 - 18:17

  10. #10
    Zarejestrowany
    Nov 2009
    Postów
    643

    Domyślnie Pisze jeden dwa posty pod żąt zamiast edytować.

    To w koncu zamykasz ten temat czy nie?

    Przed chwilą był zamknięty więc napisałem nowy topic
    teraz znów jest otwarty.


    Mad_Dud, czemu z Tobą są ciągłe problemy?

    No dobra, absrahując....

    Czyli adres e-mail: ^_^@hack.pl jest poprawny i przejdzie przez kazdy soft na drodze do wyslania/odebrania/dostarczenia wiadomosci, czy tak?
    Ostatnio edytowane przez Mad_Dud : 12-03-2010 - 23:51
    światło mądrości oświetla drogę z nikąd do nikąd

Strona 1 z 2 12 OstatniOstatni

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj