Содержимое моей строки теряется, когда я передаю ее другому методу в качестве параметра? - PullRequest
0 голосов
/ 26 января 2020

Я пытаюсь создать систему регулярных выражений как часть моей программы. Когда я передаю emailSub (который является строковой версией InputField для электронной почты пользователя) в другие функции в программе, emailSub переходит с адреса электронной почты (например: emailaddress@emailprovider.com) на ноль (я знаю это, потому что вывод Debug.Log перед передачей является адресом электронной почты, а Debug.Loging его после передачи возвращает «». Это означает, что при достижении проверки длины (IsEmailValid) он составляет менее 6 символов, поэтому все адреса электронной почты отклоняются. как недействительный.

Как я могу решить эту проблему?

Спасибо.

using System.Text.RegularExpressions; 
using System.Globalization; 
using UnityEngine; 
using UnityEngine.UI; 
using System;

public class RegEx : MonoBehaviour
{
    public InputField emailField;
    public Button acceptSubmissionButton;
    public string emailSub;

    public void Start()
    {
        var input = gameObject.GetComponent<InputField>();
        var se = new InputField.SubmitEvent();
        se.AddListener(SubmitName);
        input.onEndEdit = se;
    }

    private void SubmitName(string arg0)
    {
        Debug.Log(arg0);
        emailSub = arg0;
        Debug.Log(emailSub);
    }

    public void Sequencer(string emailSub)
    {
        Debug.Log(emailSub);
        IsEmailValid(emailSub);
        Main(emailSub);
    }

    public static bool IsEmailValid(string emailSub)
    {
        if (emailSub.Length <= 6)
        {
            Debug.Log(emailSub + "1");
            return false;
        }

        if (string.IsNullOrWhiteSpace(emailSub))
        {
            Debug.Log(emailSub + "2");
            return false;
        }

        try
        {
            emailSub = Regex.Replace(emailSub, @"(@)(.+)$", DomainMapper, RegexOptions.None, 
            TimeSpan.FromMilliseconds(200));
            string DomainMapper(Match match)
            {
                var idnConversion = new IdnMapping();
                var processDomainName = idnConversion.GetAscii(match.Groups[2].Value);
                Debug.Log(emailSub + "3");
                return match.Groups[1].Value + processDomainName;
            }
        }
        catch (RegexMatchTimeoutException e)
        {
            return false;
        }
        catch (ArgumentException e)
        {
            return false;
        }

        try
        {
            Debug.Log(emailSub + "4");
            return Regex.IsMatch(emailSub, @"^(([0-9a-z]((\.(?!\.))(?<=[0-9a-z])@))" + @"(([0-9a-z][-0- 
            9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", RegexOptions.IgnoreCase, 
            TimeSpan.FromMilliseconds(250));
        }
        catch (RegexMatchTimeoutException)
        {
            return false;
        }
    }

    public static void Main(string emailSub)
    {
        if (RegEx.IsEmailValid(emailSub))
        {
            Debug.Log($"Valid:   {emailSub}");
            Debug.Log(emailSub + "5");
        }

        else
        {
            Debug.Log($"Invalid: {emailSub}");
            Debug.Log(emailSub + "6");
        }
    }
}

1 Ответ

0 голосов
/ 30 января 2020

Ответ ниже был написан человеком, который задал оригинальный вопрос, но они написали его как замену вопроса, а не в ответе.


Я исправил проблема, программа берет содержимое текстового поля и решает, является ли текст в допустимом формате электронной почты или нет. Проблема заключалась в том, что функции работали до того, как SubmitName() обновил содержимое arg0. Вот рабочий код:

using System.Text.RegularExpressions;
using System.Globalization;
using UnityEngine;
using UnityEngine.UI;
using System;

public class RegEx : MonoBehaviour
{
    public InputField emailField;
    public Button acceptSubmissionButton;
    public string emailSub;

    public void Start()
    {
        var input = gameObject.GetComponent<InputField>();
        var se = new InputField.SubmitEvent();
        se.AddListener(SubmitName);
        input.onEndEdit = se;
    }
    private void SubmitName(string arg0)
    {
        Debug.Log(arg0);
        IsEmailValid(arg0);
        ValidCheck(arg0);
    }

    public void Sequencer(string emailSub)
    {
        Debug.Log(emailSub);
        IsEmailValid(emailSub);
        ValidCheck(emailSub);
    }

    public static bool IsEmailValid(string arg0)
    {
        if (arg0.Length <= 6)
        {
            return false;

        }

        try
        {
            return Regex.IsMatch(arg0, @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(250)); // The pattern is taken from an article written by Microsoft. https://docs.microsoft.com/en-us/dotnet/standard/base-types/how-to-verify-that-strings-are-in-valid-email-format
        }
        catch (RegexMatchTimeoutException)
        {
            return false;
        }

    }

    public static void ValidCheck(string arg0)
    {
        if (IsEmailValid(arg0))
        {
            Debug.Log($"Valid:   {arg0}");
        }

        else
        {
            Debug.Log($"Invalid: {arg0}");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...