Sprawdzanie czy adres email został podany prawidłowo

0

Jak sprawdzić czy podany z klawiatury adres email jest wpisany prawidłowo? W php, java itp jest to w miarę proste ale jak zastosować taką walidację w C++? Np mam kod (a w nim chce sprawdzić czy ta zmienna jest podana w formacie adresu email (np zawiera w środku małpę i kropkę:

 
	string email
	cout << "Podaj ile chcesz wpisac nazwisk: " << endl;
	cin >> email;
0
 
   string email
    cout << "Podaj adres email: " << endl;
    cin >> email;
0

No przecież sam sobie odpowiedziałeś, musisz sprawdzić czy w stringu znajduje się małpa i kropka. Więc z czym masz problem?

edit
Dodatkowo musiałbyś sprawdzić czy w stringu podany jest też user, i domena. Ale zacznij od małpy i kropki.

0

regex

1

Zastosuj wyrażenia regularne (tak jak w PHP).

Bibliotek jest tyle co platform, te najbardziej znane:

4

Nie powinieneś weryfikować emaila regexem. Polecam lekturę:
http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/
http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

Czasem zdarza się, że jakiś ćwierćinteligent nie pomyśli, że możesz mieć plusa, kropkę, czy adres strony w adresie i napisze regexa to odrzucającego. Ostatnio miałem tak na kickstarterze, gdy zapomniałem hasła. Efekt? Nie mogę odzyskać hasła (email "niepoprawny"), nie mogę się skontaktować z pomocą (wymagany email jako id użytkownika).

0
if (email.find("@") != string::npos && email.find(".") != string::npos)

moim zdaniem nie ma sensu kombinować bardziej, bo można przypadkiem odrzucić nietypowy acz prawidłowy adres, a i tak się nie dowiemy czy adres jest prawdziwy inaczej, jak wysyłając maila i czekając nieokreśloną ilość czasu na brak błędu.

nie angażowałbym do tego regexów z czystego lenistwa.

natomiast każdy adres musi mieć małpę i przynajmniej jedną kropkę (po małpie - to można dodać porównując czy

find("@") < rfind(".")

1 użytkowników online, w tym zalogowanych: 0, gości: 1