Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 07.11.2016
Сообщений: 15
1

Нужно проверить на корректность ввода E-mail адреса

08.11.2016, 17:08. Показов 7443. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Допустим пользователь вводит _____@___.___
Как мы можем проверить эти три ↑ ..... ↑.... ↑
поля на корректность? Во всех не меньше 1, и в первом не больше 15 символов во втором не больше п'яти, в третьем не больше трёх. И как сделать что-бы были последние два только в виде символов?
Как это сделать в виде кода?
Если можно напишите код и обьясните если будет в этом необходимость.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2016, 17:08
Ответы с готовыми решениями:

Проверка e-mail адреса на корректность
Подскажите название метод проверки e-mail адреса на корректность. Типа наличие символов @ . и т.д,...

Проверка на корректность введенного e-mail адреса
Доброго времени суток! Написал программу связанную из http-запросов, но не могу написать проверку...

Проверить корректность ввода
Постройте функции для запроса и чтения ФИО, почтового адреса и даты, и проверьте корректность ввода.

Как на мобильном клиенте проверить корректность введенного адреса эл. почты?
Как на мобильном клиенте проверить корректность введенного адреса эл. почты?

17
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
08.11.2016, 17:29 2
2
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
08.11.2016, 18:24 3
Проверка корректности email адреса для плюсов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <regex>
#include <string>
 
bool CheckEmail(const std::string &str)
{
    return std::regex_match(str, std::regex("([\\w-\\.]+)@((?:\\w+\\.)+)([a-zA-Z]{2,4})"));
}
 
int main()
{
    std::cout << std::boolalpha << CheckEmail("abra@a.ruuqq") << std::endl;
}
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
08.11.2016, 18:26 4
если мне память не изменяет, то трушная регулярка которая проверяет на валидность E-Mail занимает 100500 строк, вы определитесь вам реально нужно проверить, валидный ли e-mail, или просто соответствует ли он вашим глубого субъективным требованиям?
0
0 / 0 / 0
Регистрация: 07.11.2016
Сообщений: 15
08.11.2016, 19:14  [ТС] 5
Maxim Prishchepa, Мне только что-бы входило в эти диапазоны, и условия выполнялись, первый курс как не крути)

Добавлено через 4 минуты
MrGluck, в какой среде вы программировали? У меня ошибки выходят.
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
08.11.2016, 19:19 6
регулярки вроде в 11-м стандарте появились, скорее всего из-за этого... ну и ошибку бы кинули, было-бы легче
0
0 / 0 / 0
Регистрация: 07.11.2016
Сообщений: 15
08.11.2016, 19:21  [ТС] 7
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\c++0x_warning.h|32 |error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.|
D:\Code blocks\1\Вторая лаба\2-z1.cpp||In function 'bool CheckEmail(const string&)':|
D:\Code blocks\1\Вторая лаба\2-z1.cpp|7|error: 'regex_match' is not a member of 'std'|
D:\Code blocks\1\Вторая лаба\2-z1.cpp|7|error: 'regex' is not a member of 'std'|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Если что-то не то кинул, прошу простить)
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
08.11.2016, 19:29 8
если преподу шоб сдать, то тогда скорее всего от вас хотят увидеть что-то по типу:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <string>
#include <sstream>
#include <vector>
 
void split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss;
    ss.str(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
}
 
 
std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}
 
bool isValid(string email)
{
     vector<string> stepOne = email.split(email, '@');
     if (stepOne.size() != 2)
     {
          return false;
     }
     if (stepOne[0].size() < 1 || stepOne[0].size() >15)
     {
           return false;
     }
     vector<string> stepTwo = split(stepOne[1], '.');
     if (stepTwo.size() != 2)
     {
           return false;
     }
     if (stepTwo[0].size() < 1 || stepTwo[0].size() > 5)
     {
          return false;
     }
 
     if (stepTwo[1].size() < 1 || stepTwo[1].size > 3)
     {
           return false;
     }
     return true;
}
 
void main()
{
     string email = "test@email.add";
     bool result = isValid(email);
}
Добавлено через 55 секунд
Цитата Сообщение от Bevz Slava Посмотреть сообщение
Если что-то не то кинул, прошу простить)
как-раз то... как я и говорил, у вас отключен 11-й стандарт, гуглите как подключить его для вашего компилятора, ну или пробуйте мой вариант выше
0
0 / 0 / 0
Регистрация: 07.11.2016
Сообщений: 15
08.11.2016, 19:35  [ТС] 9
Что-то через чур сложно, реально ли ее как-то упростить?
и выдало ошибки:
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
D:\Code blocks\1\Вторая лаба\zashita.cpp|21|error: 'string' was not declared in this scope|
D:\Code blocks\1\Вторая лаба\zashita.cpp|21|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stringfwd.h|62|not e: 'std::string'|
D:\Code blocks\1\Вторая лаба\zashita.cpp|22|error: expected ',' or ';' before '{' token|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
08.11.2016, 19:36 10
тфу... ну сделайте #include <string>
0
0 / 0 / 0
Регистрация: 07.11.2016
Сообщений: 15
08.11.2016, 19:37  [ТС] 11
Так подключен #include <string>
Но выдает ошибку все-равно...
0
Эксперт С++
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
08.11.2016, 19:38 12
наврал...
вот вроде рабочий:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <string>
#include <sstream>
#include <vector>
 
using namespace std; 
 
void split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss;
    ss.str(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
}
 
 
std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}
 
bool isValid(string email)
{
     vector<string> stepOne = split(email, '@');
     if (stepOne.size() != 2)
     {
          return false;
     }
     if (stepOne[0].size() < 1 || stepOne[0].size() >15)
     {
           return false;
     }
     vector<string> stepTwo = split(stepOne[1], '.');
     if (stepTwo.size() != 2)
     {
           return false;
     }
     if (stepTwo[0].size() < 1 || stepTwo[0].size() > 5)
     {
          return false;
     }
 
     if (stepTwo[1].size() < 1 || stepTwo[1].size() > 3)
     {
           return false;
     }
     return true;
}
 
int main()
{
     string email = "test@email.add";
     bool result = isValid(email);
    return 0;
}
0
0 / 0 / 0
Регистрация: 07.11.2016
Сообщений: 15
08.11.2016, 19:47  [ТС] 13
Уже запустило, но не хочет ничего работать.
То есть я хочу ввести email- но сразу прекращается.
Вы уж простите если я поднадоел)
Миниатюры
Нужно проверить на корректность ввода E-mail адреса  
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
08.11.2016, 19:47 14
MrGluck, оставлю здесь: https://habrahabr.ru/post/280798/
1
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
08.11.2016, 20:04 15
Цитата Сообщение от Bevz Slava Посмотреть сообщение
MrGluck, в какой среде вы программировали? У меня ошибки выходят.
MinGW в полной мере еще не научился регулярки поддерживать. Тестировал на VS 2015.

Добавлено через 30 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
MrGluck, оставлю здесь: https://habrahabr.ru/post/280798/
Читал.
Но потренироваться на простых примерах хотелось

Добавлено через 59 секунд
Цитата Сообщение от Bevz Slava Посмотреть сообщение
То есть я хочу ввести email- но сразу прекращается.
Так вы хоть результат выведите.
C++
1
std::cout << std::boolalpha << result << std::endl;
0
0 / 0 / 0
Регистрация: 07.11.2016
Сообщений: 15
08.11.2016, 20:52  [ТС] 16
Мда... Я совсем запутался, пойду искать другой метод как можно это сделать, спасибо вам)
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
08.11.2016, 21:15 17
Есть чудная китайская библиотека RegExp.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
static CRegexpT<char>      _RE_Mail;
 
   ...
 
   // Compile
   _RE_Mail.Compile("\\b(?:[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])+)\\])\\b",SINGLELINE);
 
   ...
 
   // Prepare
   CContext*   pContext = _RE_Mail.PrepareMatch((const char*)(LPCTSTR)rText);
 
   // Loop
   MatchResult   Result = _RE_Mail.Match(pContext);
 
   if (!Result.IsMatched())
   {
      // Nothing found
      _RE_Mail.ReleaseContext(pContext);
      return;
   }
 
   ...
 
   while (Result.IsMatched())
   {
      int   iStart = Result.GetStart();
      int   iSize  = Result.GetEnd() - iStart;
 
   ...
 
       // Next
      Result = _RE_Mail.Match(pContext);
   }
 
   // Release
   _RE_Mail.ReleaseContext(pContext);
0
805 / 532 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
08.11.2016, 21:23 18
Bevz Slava, ну вот, решение в лоб
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <string>
using namespace std;
 
inline bool IsAllowed(const string& str, const bool& mode)
{
    string charSet
    (
        "qwertyuiopasdfghjklzxcvbnm"
        "QWERTYUIOPASDFGHJKLZXCVBNM"
    );
    mode ? charSet += "1234567890_" : charSet;
 
    return str.find_first_not_of(charSet) == string::npos ?
        false : true;
 
}
 
bool CheckEmail(const string& email)
{
    bool result(false);
 
    size_t pos( email.find('@') );
    if (pos == string::npos || pos != email.rfind('@'))
        return result;
 
    const string substr1(email, 0, pos), substr2(email, pos + 1);
 
    if
    (
        substr1.empty() || substr2.empty() ||
        substr1.size() > 15u || IsAllowed(substr1, true)
    )
        return result;
 
    pos = substr2.find('.');
    if (pos == string::npos || pos != substr2.rfind('.'))
        return result;
 
    const string substr2a(substr2, 0, pos), substr2b(substr2, pos + 1);
 
    if
    (
        substr2a.empty() || substr2b.empty() ||
        substr2a.size() > 5u || substr2b.size() > 3u ||
        IsAllowed(substr2a, false) || IsAllowed(substr2b, false)
    )
        return result;
 
    return result = true;
}
 
int main()
{
    string email = "sdf_@dsd.dd";
    //cin >> email;
 
    cout << boolalpha << CheckEmail(email) << endl;
 
    system("pause");
}
0
08.11.2016, 21:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2016, 21:23
Помогаю со студенческими работами здесь

Проверить корректность ввода скобок!
Помогите пожалуйста! Для введенной с клавиатуры строки программа должна определить, корректно ли...

Проверить корректность ввода элементов матрицы
Ввод элементов матрицы А(m, n) осуществляется в произвольном порядке тройками чисел &lt; i, j, Aij&gt;....

Сложить два числа, проверить корректность ввода
Есть задача сложить два числа, при этом проверять корректны ли исходные данные (числа не содержат...

RegExp: проверить корректность ввода имени и пароля
Здравствуйте! Никогда раньше не сталкивался с RegExp, и, поползав по интернету, не очень пока...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru