Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 10.02.2011 Ostrzeżenie: (0%)
|
Witam,
Napisałem prostą funkcję do weryfikacji adresów e-mail. Nie będę się zagłębiał w szczegóły tej funkcji, ponieważ mam problem tylko w 1 miejscu z działaniem wyrażeń regularnych. Moja funkcja dzieli podany przez użytkownika adres e-mail w miejscu znaku @ na 2 łańcuchy. Interesuje mnie zweryfikowanie tylko części lokalnej adresu, bo domenę sprawdzam przy pomocy funkcji 'checkdnsrr'. Szukałem funkcji do weryfikacji e-mail w wielu różnych miejscach, ale zazwyczaj były dla mnie niewystarczające. Moja funkcja musi sprawdzać tak - część lokalna adresu wg wytycznych nie może się zaczynać od kropki, nie może się kończyć kropką i 2 kropki lub więcej nie mogą występować jedna po drugiej. W tej części adresu mogą występować następujące znaki: ! # $ % & ' * + - / = ? ^ _ ` . { | } ~ i oczywiście a-z A-Z 0-9. Problem polega na tym, że wywołanie funkcji 'preg_match' z moim wyrażeniem regularnym daje niespodziewane dla mnie efekty. Poniżej przedstawię fragment problematycznego kodu: $wyrazenie = '/^[a-zA-Z0-9!#\$%&\'\*\+-]{1}[a-zA-Z0-9!#$%&\'*+-\/=?^_`\.{|}~]*$/'; if(preg_match($wyrazenie, $email_nazwa)) { $status = true; } Na tą chwilę interesuje mnie tylko początek wyrażenia regularnego, która sprawdza pierwszy znak adresu e-mail. Powyższy kod działa dobrze, ale po dodaniu do niego pozostałych dopuszczalnych znaków, czyli: / = ? ^ _ ` { | } ~ (oczywiście znaki, które mają specjalne znaczenie dla parsera poprzedzam znakiem ucieczki \) wyrażenie daje dziwne rezultaty. Jeśli podam adres z kropką na początku (która przecież nie występuje w moim przedziale znaków) adres jest uznawany za prawidłowy. Nie wiem dlaczego tak się dzieje. Poza tym, czy ma ktoś pomysł na lepsze wyrażenie regularne, które sprawdza lokalną część adresu? Nie wiem też jak napisać wyrażenie, które nie pozwoli na występowanie dwóch lub więcej kropek obok siebie. Czy wyrażenia regularne podołają w tym przypadku, czy muszę napisać swoją funkcję do sprawdzania kropek? Z góry dziękuję za wszystkie podpowiedzi. Ten post edytował klorko 10.02.2011, 11:56:09 |
|
|
|
klorko Walidacja adresu e-mail przy pomocy wyrażeń regularnych 10.02.2011, 11:54:48
wookieb http://forum.php.pl/index.php?showtopic=16...st... 10.02.2011, 12:01:44
klorko Dziękuję bardzo wookieb za precyzyjną i wyjątkowo ... 10.02.2011, 12:16:26
wookieb A tak zapytam. Po co walidujesz czy domena istniej... 10.02.2011, 12:20:38
klorko Chcę mieć pewność (oczywiście na tyle, na ile to m... 10.02.2011, 12:30:09
wookieb Ok może i go przepuści ale tak naprawdę jeżeli kto... 10.02.2011, 12:33:42
klorko Oczywiście masz rację. Mój przykład z mailem typu:... 10.02.2011, 12:45:36 ![]() ![]() |
|
Aktualny czas: 23.12.2025 - 18:21 |