· 4 years ago · Aug 13, 2021, 06:30 PM
1#include "mail_addr_validator.hpp"
2#include <ctype.h>
3
4QString suffix = "@gmail.com";
5
6bool is_mail_valid(QString mail) {
7 // remove unnessessary spaces
8 mail.replace(' ', "");
9 mail.replace('\t', "");
10 mail = mail.toLower(); // make the address case-insesitive
11
12 if (!mail.endsWith(suffix)) return false;
13
14 // remove dots from the address (since GMail ignores them)
15 mail.replace('.', "");
16 suffix.replace('.', "");
17
18 // now only the prefix will be checked
19 auto size = mail.size() - suffix.size();
20 if (size == 0) return false;
21
22 // return false if the first and the last character of the prefix is not a letter or a digit
23 if (!mail[0].isLetterOrNumber() || !mail[size - 1].isLetterOrNumber()) return false;
24
25 auto contains_letters = false;
26 QChar prev = ' ';
27
28 for (auto i = 0; i < size; ++i) {
29 auto c = mail[i];
30
31 if (c.isLetter()) {
32 contains_letters = true;
33 } else if (!c.isDigit()){
34 if (c != '_' && c != '-') return false;
35
36 if (c == prev && !c.isDigit()) return false;
37 }
38
39 prev = c;
40 }
41
42 if (!contains_letters) return false;
43
44 return true;
45}