我一直在尝试提出一种适当的方法来实施输入验证方法,以检查帐号小于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);
}
}
}
答案 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));
要在不使用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));