首页 > 解决方案 > 帐号输入验证 C#

问题描述

我一直在尝试想出正确的方法来实现输入验证方法来检查特定情况,即当帐号小于 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);
            }
        }
    }

标签: c#validationc#-4.0c#-3.0

解决方案


您可以使用正则表达式:

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));

现场演示

在没有 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;
  }

推荐阅读