帐号输入验证C#

时间:2018-09-25 05:47:48

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

我一直在尝试提出一种适当的方法来实施输入验证方法,以检查帐号小于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 :(得分:2)

您可以使用正则表达式:

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

要在没有正则表达式的情况下进行验证,您可以按照以下步骤进行操作:

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

答案 1 :(得分:0)

也许这可以为您提供帮助

    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 
                }
            }                
        }
    }

答案 2 :(得分:0)

一个问题是这个

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

因为string.Split()的结果是一个字符串数组。对于您的情况,数组的Length将为4。

但是尽管如此,提示符还是会提示您进行下一次评估,因为您不能TryParse的值“ 0000 0000 0000 0000”

答案 3 :(得分:0)

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