Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 2 из 2
  1. #1
    Аватар для annas2001
    Пользователь

    Статус
    Оффлайн
    Регистрация
    15.08.2019
    Сообщений
    13
    Репутация:
    0 ±

    Неправильно работает проверка E-Mail на корректность.

    Всем привет. Столкнулась с такой проблемой - сначала когда делала проверку E-Mail, можно было вводить любой совершенно ящик, или даже набор цифр и букв и никакой ошибки не выдавало, хотя должно было. Я поменяла кое что, и теперь даже если ввести правильный почтовый ящик будет выдавать ошибку, мол "Некорректный E-Mail". Как это исправить?

    Если что, я хочу сделать систему, в которой принимаются почтовые адреса популярных сервисов, а не проверку на значок "@", "." и "com" или "ru".

    Сам код:
    1. if(strfind(inputtext, "yandex.ru", true) == -1 || strfind(inputtext, "yandex.ua", true) == -1 || strfind(inputtext, "yandex.com", true) == -1 || strfind(inputtext, "yandex.kz", true) == -1 || strfind(inputtext, "yandex.by", true) == -1 || strfind(inputtext, "ya.ru", true) == -1 || strfind(inputtext, "narod.ru", true) == -1)
    2. {
    3. ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{800000}Ввод E-Mail", "{ffffff}Пожалуйста, введите свой действующий E-Mail.\n\nВ дальнейшем вам будет необходимо подтвердить адрес электронной почты\nдля возможности дальнейшего восстановления аккаунта.\n\nПринимаются адреса сервисов yandex.ru, mail.ru, google.com.", "{800000}Ввод", "{800000}Выход");
    4. SendClientMessage(playerid, 0x800000AA, "[Ошибка]: {ffffff}Некорректный E-Mail.");
    5. return 0;
    6. }
    7. if(strfind(inputtext, "mail.ru", true) == -1 || strfind(inputtext, "list.ru", true) == -1 || strfind(inputtext, "bk.ru", true) == -1 || strfind(inputtext, "inbox.ru", true) == -1 || strfind(inputtext, "gmail.com", true) == -1)
    8. {
    9. ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "{800000}Ввод E-Mail", "{ffffff}Пожалуйста, введите свой действующий E-Mail.\n\nВ дальнейшем вам будет необходимо подтвердить адрес электронной почты\nдля возможности дальнейшего восстановления аккаунта.\n\nПринимаются адреса сервисов yandex.ru, mail.ru, google.com.", "{800000}Ввод", "{800000}Выход");
    10. SendClientMessage(playerid, 0x800000AA, "[Ошибка]: {ffffff}Некорректный E-Mail.");
    11. return 0;
    12. }

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Так как твои условия построены на ложности результата (strfind проверяется с "-1", обозначающей, что строка не найдена), выражение должно строится не на "ИЛИ", а на "И".

    Условие должно выглядеть так:
    Код:
    если строка не содержит *это* И *это* И *это* И *это* - показывать то-то.
    В данном случае условие не сработает, если хоть одно из значений содержится в строке (то, что тебе нужно).
    А у тебя сейчас:
    Код:
    если строка не содержит *это* ИЛИ *это* ИЛИ *это*ИЛИ *это* - показывать то-то.
    То бишь, если хоть одно из значений не найдено - показываем ошибку. Чтоб такое условие не сработало, строка должна содержать сразу все значения.




    Исправить ситуацию можно заменив "||" на "&&"
      Открыть/закрыть
    Хотя так же можно заменить "strfind(...) == -1" на "strfind(...) != -1" (тогда твоё условие будет звучать как: "если строка СОДЕРЖИТ *это* ИЛИ *это* ИЛИ *это*ИЛИ *это* - показывать то-то.").

    Но в этом случае структура кода уже должна быть не такой:
    PHP код:
    if(strfind(...) != -|| strfind(...) != -|| strfind(...) != -|| strfind(...) != -1)
    {
        
    ShowPlayerDialog(...);
        return 
    0;
    }
    //Остальной код 
    А такой:
    PHP код:
    if(strfind(...) != -|| strfind(...) != -|| strfind(...) != -|| strfind(...) != -1)
    {
        
    //Остальной код
    }
    else
    {
        
    ShowPlayerDialog(...);
        return 
    0;



    Хотя лучше для удобства сделать цикл, чтоб избавиться от длиннющего условия.
    Как-то так:
    PHP код:
    static const domains_list[][] = 
    {
        
    "yandex.ru",
        
    "yandex.ru",
        
    "yandex.ua"
        
    "yandex.com",
        
    "yandex.kz",
        
    "yandex.by",
        
    "ya.ru",
        
    "narod.ru",
        
    "mail.ru",
        
    "list.ru",
        
    "bk.ru",
        
    "inbox.ru",
        
    "gmail.com"// Для добавления новых доменов просто вписывай их сюда и скрипт автоматически начнёт их учитывать
    };

    new 
    bool:find false;
    for(new 
    isizeof(domains_list); i++)
    {
        if(
    strfind(inputtextdomains_list[i], true) != -1)
        {
            
    find true;
            break;
        }
    }
    if(!
    find)
    {
        
    ShowPlayerDialog(playerid1DIALOG_STYLE_INPUT"{800000}Ввод E-Mail""{ffffff}Пожалуйста, введите свой действующий E-Mail.\n\nВ дальнейшем вам будет необходимо подтвердить адрес электронной почты\nдля возможности дальнейшего восстановления аккаунта.\n\nПринимаются адреса сервисов yandex.ru, mail.ru, google.com.""{800000}Ввод""{800000}Выход");
        
    SendClientMessage(playerid0x800000AA"[Ошибка]: {ffffff}Некорректный E-Mail.");
        return 
    0;

    Этот код можно целиком в одно место поместить (не обязательно массив с доменами помещать в начало мода. Можно оставить рядом с диалогом).
    Последний раз редактировалось DeimoS; 15.08.2019 в 14:11.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. 2 пользователя(ей) сказали cпасибо:
    Aurelius (13.01.2021) Outsider (15.08.2019)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •