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

Определить, является ли e-mail корректным

20.08.2015, 19:44. Показов 9817. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дан email в строке. Определить, является ли он корректным(наличие символа @ и точки, наличие не менее двух символов после последней точки и т.д.)
Помогите с решением
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2015, 19:44
Ответы с готовыми решениями:

Проверить, является ли заданный e-mail корректным
Адрес электронной почты состоит из двух частей: имени пользователя и имени домена, разделённых...

Для каждого слова определить, является ли оно корректным именем
1. Вводится массив слов. Для каждого слова определить, является ли оно корректным именем (первая...

Запросить у пользователя e-mail и определить является ли он верным
Запросить у пользователя e-mail и определить является ли он верным У кого-то есть код на с++

Определить является ли строка корректным скобочным выражением и максимальную глубину вложенности скобок
Дана строка символов ( и ). Определить является ли она корректной скобочным выражением. Определить...

12
50 / 49 / 29
Регистрация: 11.11.2014
Сообщений: 332
20.08.2015, 21:07 2
С помощью функции strtok(); разбей на лексемы и ищи знаки.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
20.08.2015, 21:19 3
Тут и без strtok всё легко решается, просто Луню лень приложить хоть какие-то усилия для её решения...
0
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
20.08.2015, 22:01 4
strtok не хорошая функция. Даже в Си.
Я бы использовал регулярки, тем более, что они уже появились в стандарте.

Не по теме:

Видел я как-то регулярку для проверки email на полтора экрана…

0
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
20.08.2015, 22:07 5
Вот тебе полностью рабочее решение, удовлетворяющее твоим требованиям. Внутри функции проверки, которая находится под главной функцией, есть поле настройки, где можно подрегулировать чувствительность проверки.

Решение работает, если создать проект в Microsoft Visual Studio 2010 под названием Win32 Консольное приложение, в мастере создания выбрать "предкомпилированный заголовок". Приведенный ниже текст скопировать в главный файл .cpp созданной программы вместе со всеми #инклудами.


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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Проверка корректности e-mai'la.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string>   //Обязательно подключаем string
 
using namespace std;
 
 
 
bool verify_e_mail(string e_mail);          //Прототип функции, которая объявлена ниже main
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");                       //отображение кириллицы
    string e_mail = "";                             //создаем string переменную                
    cout << "Введите e-mail: "; 
    cin >> e_mail;                                  //Принимаем e-mail
    if (verify_e_mail(e_mail) == 1)                 //Посылаем e-mail на проверку в функцию и смотрим условие
    {
    system("cls");                                  //Очищаем консоль     
    cout << "e-mail " << e_mail << " является корректным!";       //Пишем, что e-mail корректен
    }
    else
    {
    system("cls");                                              //Очищаем консоль     
    cout << "e-mail " << e_mail << " не прошел проверки на корректность!";    //пишем, что e-mail некорректен!
    }
    cout << "\n";
    system("pause");
    return 0;
}
 
 
/*===================================================================
|                                                                   |
|                    ФУНКЦИЯ ПО ПРОВЕРКЕ E-mail                        |
|                                                                   |
====================================================================*/
 
bool verify_e_mail(string e_mail)
{
    // Блок настроек функции
    const unsigned short int amendment = 1;                         //поправка на знак (>)
    const unsigned short int quantity_before_dog = 4 - amendment;   //Если стоит 4, значит, до символа (@) должно стоять 4 символа для прохождения проверки
    const unsigned short int quantity_past_dog = 2;                 //Если стоит 2, значит, после символа (@) и до символа  (.) должно стоять не менее двух букв для прохождения проверки 
    const unsigned short int quantity_past_dot = 2;                 //Если стоит 2, то e-mail пройдет проверку только при наличии двух и более символов после точки(.)
    // Конец блока настроек
 
 
    bool result = 0;                                //Флажок общего результата проверки
    bool check_dog = 0;                             //Флажок наличия собаки (@)
    bool check_dot = 0;                             //Флажок наличия точки
    unsigned short int dog_position = 0;            //Переменная отслеживания позиции собаки (@)
    unsigned short int dot_position = 0;            //Переменная отслеживания позиции точки (.)
    const int value = 100;                          //Создаем константу длинны массива
    char char_array[value];                         //Создаем массив символов
    //заполняем массив "сигнальными" символами, обозначающими конец e-mail'а при помощи цикла
    for (int i = 0; i < value; ++i)
    {
        char_array[i] = char(33);
    }
 
    strcpy(char_array, e_mail.c_str());             //Перекидываем символы из строки в символьный массив
    for (int i = 0; i < value; ++i)                 //Создаем цикл проверки собачки
    {
        if (((char_array[i]) == char(64)) && (i > quantity_before_dog)) //если у нас имеется собачка, и она не является самым первым или каким-либо другим условленным по позиции символом (см. настройки), флажок наличия собачки становится равным 1.
        {
            check_dog = 1;
            dog_position = i;                           //обязательно отслеживаем позицию собачки для проверки только той точки, что стоит после неё
        }
    
    }
 
for (int i = 0; i < value; ++i)                 //Создаем цикл проверки для положения точки или её отсутсвия
    {
        //Если у нас появилась точка после собаки и после неё некоторое количество символов (см. настройки), то точка засчитывается
        if (((char_array[i]) == char(46)) && (i > (dog_position + quantity_past_dog)))  
        {
 
            check_dot = 1;
            dot_position = i;   
            //Обязательно отслеживаем позицию точки, как и в прошлый раз
        }
    
}
    for (int i = 0; i < value; ++i)                 //Создаем цикл проверки количества символов после точки
    {
        //Если у нас больше, чем два символа после точки, то проверка e-mail'a пройдена окончательно! Следует выход из функции с результатом 1.
        if (((char_array[i]) != char(33)) && (i > (dot_position + 2)))  
        {
            if ((check_dot == 1) && (check_dog == 1))           //последняя проверка, указывающая, прошли ли проверку символы собака и точка.
            {
                result = 1;
                return result;
            }
            else
            {
                result = 0;
                return result;
            }
        }
        else
        {
            if (i == value)                             //Иначе если у нас есть один символ после точки или все элементы массива заполнены сигнальными символами, проверка запорота.
            {
                result = 0;
                return result;
            }
        }
    }
}
 
//by gledor
0
castaway
20.08.2015, 22:10
  #6

Не по теме:

Цитата Сообщение от mymedia Посмотреть сообщение
Я бы использовал регулярки
Регулярки? Для такой задачи? Для новичка? Ты серьёзно?

0
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
21.08.2015, 00:16 7
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
       //----------------------------------------------------------------
        // Function IsValidEmail:
        //   Validates an email address.  Email address format [a@b.c] 
        //     should comply with RFC822.
        // Returns:
        //   False if email address passes the validation rules.
        //----------------------------------------------------------------
        public static bool IsValidEmail(String email_addr)
        {
            String REGEXP_ISVALIDEMAIL = @"^\w+((-\w+)|(\.\w+))*\@\w+((\.|-)\w+)*\.\w+$";
            bool isValid = (new Regex(REGEXP_ISVALIDEMAIL)).IsMatch(email_addr);
            if ( isValid ) return true;
            return false;
        }
0
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 11
21.08.2015, 20:57  [ТС] 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
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <clocale>
#include <conio.h>
#include <stdlib.h>
 
int main ()
{
char n;
setlocale ( LC_ALL, "Rus" );
  char str[40];
  std::cout<<"Введите Email\n";
  std::cin>>str;
  {
bool valid = true;
int all_presents = 0;
std::string suitable_symbols = "-_.@"; // допустимые символы помимо латинских букв и цифр
for(int i = 0; str[i] != '\0'; i++)
    {
    if( !isalpha(str[i]) && !isdigit(str[i]) && suitable_symbols.find(str[i]) == std::string::npos){ // наличие недопустимого символа
        valid = false; break;
    }
    if(i > 0 && str[i] == '.' && str[i - 1] == '.') { valid = false; break; } // две точки подряд
    else if(i > 0 && str[i] == '@' && !all_presents) { all_presents = 1; } // наличие @
    else if(str[i] == '@' && all_presents) { valid = false; break; } // наличие двух @ в строчке
    else if( ( isalpha(str[i]) || isdigit(str[i]) ) && all_presents == 1) { all_presents = 2; } // наличие буквы или цифры после @
    else if(str[i] == '.' && all_presents == 2) { all_presents = 3; } // наличие точки после символа( который после @ )
    else if(isalpha(str[i]) && all_presents == 3 && str[i + 2] == '\0') { all_presents = 4; } // наличие буквы в конце строчки
    }
if(valid && all_presents == 4) { std::cout << "Ваш email допустим.";}
else { std::cout<<"Email введён неправильно!\n";}
}
}
0
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
21.08.2015, 21:31 9
Прям героическая эпопея.. и это всё вместо:
C++
1
2
3
4
5
6
7
8
9
10
#include <regex>
 
bool isValidEmail(const std::string& email)
{
    // define a regular expression
    const std::tr1::regex pattern ("(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+");
 
    // try to match the string with the regular expression
    return std::tr1::regex_match(email, pattern);
}
0
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
21.08.2015, 23:56 10
SerVal, дополню ваш код
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <regex>
 
bool isValidEmail(const std::string& email)
{
    // define a regular expression
    const std::tr1::regex pattern (R"rbx((?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
 \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
 \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
 \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*))rbx");
 
    return std::tr1::regex_match(email, pattern);
}
Не уверен, правда, что переносы строк правильно отработают.
1
11 / 6 / 3
Регистрация: 20.03.2019
Сообщений: 76
11.10.2021, 02:03 11
Ребят, привет. Глаз уже замылен и не могу найти ошибку

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
#include <string>
#include <cctype>
 
std::string checkEmail(std::string str);
 
int main()
{
    std::cout << "Enter your e-mail addres" << '\n';
    std::string e_mail;
    std::cin >> e_mail;
    std ::cout << checkEmail(e_mail);
}
 
std::string checkEmail(std::string str)
{
    std::string parthOne;
    std::string parthTwo;
    int dogPoint = 0;
    int dotPoint = 0;
    bool check = false;
    std::string element = "!#$ % &'*+-/=?^_`{|}~@";
    int i = 0;
    int size = str.size();
 
    while (i != size)
    {
        while (str[i] != '@') {
            if (str[i] == element[i] || isalnum(str[i])) {
                bool check = true;
                parthOne += str[i];
            }
            else if (str[i] == '@') {
                dogPoint++;
            }
 
            else if ((str[i] == '.' && str[i + 1] == '.') || str[0] == '.' || dogPoint > 1) {
                check = false;
                break;
            }
            else {
                check = false;
                break;
            }
 
            ++i;
            if (parthOne.length() > 64) {
                check = false;
                break;
            }
        }
 
        if (check == true) {
            while (str[i] != size)
            {
                if (isalnum(str[i]) || str[i] == '\.') {
                    check = true;
                    parthTwo += str[i];
                }
 
                else if (str[i] == '@') {
                    break;
                }
 
                else if (str[i] == '.') {
                    dotPoint++;
                }
 
                if ((str[i] == '.' && str[i + 1] == '.') || str[size] == '.' || dotPoint > 1) {
                    check = false;
                    break;
                }
                ++i;
                if (parthTwo.length() > 63) {
                    check = false;
                    break;
                }
            }
        }
    }
    
    if (check) {
        return "Yes";
    }
    else {
        return "No";
    }
}
0
Неэпический
18108 / 10695 / 2062
Регистрация: 27.09.2012
Сообщений: 26,928
Записей в блоге: 1
11.10.2021, 09:14 12
Цитата Сообщение от Antoniy274 Посмотреть сообщение
if (str[i] == element[i] || isalnum(str[i])) {
                bool check = true;
Это уже другая переменная check.
0
11 / 6 / 3
Регистрация: 20.03.2019
Сообщений: 76
11.10.2021, 09:17 13
Цитата Сообщение от Croessmah Посмотреть сообщение
Это уже другая переменная check
Это исправил, но проблема точно не в этом
0
11.10.2021, 09:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.10.2021, 09:17
Помогаю со студенческими работами здесь

Проверить, является ли PIN-код корректным
В банке «Литровый» хотят установить сейф. Программистами этого банка уже написан генератор...

Apply_: 1 - не является корректным именем функции! [Homelisp]
Добрый день, делаю лабораторную, и взял пример функции с другой...

Определить является ли e-mail введеная строка
Regex re = new Regex (@&quot;http:\\+ua$&quot;); Я понимаю что что-то связано с ссылкой, но почему...

Является ли строка e-mail
Проверить, является ли введенная строка эл. адресом.


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

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