Подтверждение ввода номера счета C # - PullRequest
0 голосов
/ 25 сентября 2018

Я пытался найти правильный способ реализации метода проверки входных данных, чтобы проверить наличие конкретных сценариев, например, когда номер счета меньше 16 или больше.В данный момент я пытаюсь заставить его работать, если присутствуют 16 цифр, но он выдает ошибку с подсказкой, когда не будет.

Вот пользовательский метод, с которым я работал.Шаблон номера счета: 0000 0000 0000 0000 или 0000-0000-0000-0000.

    public static void Validate(string input, int number, string prompt1, string prompt2, string prompt3)
    {
        while (string.IsNullOrEmpty(input) || (!(int.TryParse(input, out number))) || number <= 0 || number > 16)
        {
            if (string.IsNullOrEmpty(input))
            {
                Console.WriteLine(prompt1);
                input = Console.ReadLine();
            }
            else if (input.Split(' ').Length < 16)
            {
                Console.WriteLine("Invalid Digits");
                input = Console.ReadLine();
            }
            else if (!(int.TryParse(input, out number)))
            {
                Console.WriteLine(prompt2);
                input = Console.ReadLine();
                int.TryParse(input, out number);
            }
            else
            {
                Console.WriteLine(prompt3);
                input = Console.ReadLine();
                int.TryParse(input, out number);
            }
        }
    }

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018
string input = "0000-0000-0000-0000";
string[] splitInput = input.Split('-');
int number = 0;
bool isValid = true;

Метод 1:

foreach(var item in splitInput)
{
   if(item.Length != 4 || !int.TryParse(item, out number))
   {
        isValid = false;
        break;
   }
}

Метод 2:

isValid = splitInput.All(a => a.Length == 4 && int.TryParse(a, out number));
0 голосов
/ 25 сентября 2018

может быть, это может вам чем-то помочь

    public static void Validate(string input, int number, string prompt1, string prompt2, string prompt3)
    {
        while (string.IsNullOrEmpty(input) || (!(int.TryParse(input, out number))) || number <= 0 || number > 16)
        {
            if (string.IsNullOrEmpty(input))
            {
                Console.WriteLine(prompt1);
                input = Console.ReadLine();
            }
            else 
            {
                var accountNumberInArray = input.Split(' ');
                string accountNumber = string.Empty;
                foreach (var item in accountNumberInArray)
                {
                    accountNumber += item;
                }
                if (accountNumber.Length < 16)
                {
                    //Do something 
                }
                else if (accountNumber.Length > 16)
                {
                    //Do something 
                }
                else if(accountNumber.Length == 16)
                {
                    //Do Something 
                }
            }                
        }
    }
0 голосов
/ 25 сентября 2018

Одна проблема заключается в следующем:

else if (input.Split(' ').Length < 16)  

, поскольку результатом string.Split() является массив строк.Для вашего случая Length массива будет 4.

Но, тем не менее, запрос будет отправлен для следующей оценки, потому что вы просто не можете TryParse значение «0000 0000 0000 0000»

0 голосов
/ 25 сентября 2018

Вы можете использовать Regex:

bool isValid = Regex.IsMatch(input, "((\\d{4})-){3}\\d{4}");

, чтобы подтвердить без Regex, вы можете сделать это следующим образом:

string input = "0000-0000-0000-0000";
string[] splited = input.Split('-');
if (splited.Length != 4) splited = input.Split(' ');
bool isValid = splited.All(a => a.Length == 4) && !splited.Any(a => a.Any(b => b < 48 || b > 57));

LIVE DEMO

Для проверки без Linq:

  private bool IsValid(string input)
  {
      string[] splited = input.Split('-');
      if (splited.Length != 4) splited = input.Split(' ');
      for(int i=0; i< splited.Length; i++)
      {
           if(splited[i].Length!=4) return false;
           for(int j=0; j<4; j++)
                 if(splited[i][j]>57 || splited[i][j]<48) return false;
      }
      return true;
  }
...