c# - 帐号输入验证 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);
}
}
}
解决方案
您可以使用正则表达式:
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;
}
推荐阅读
- c# - connectionString 中的错误:不支持关键字:“数据源”C# MVC web.config
- javascript - JavaScript,订购对象的功能
- java - 防止在 Spring Boot api 中下载文件
- codeigniter - Codeigniter 重定向组中的所有路由
- c++ - 编写一个程序,使用内置函数和用户定义函数计算 sin(x) 的值
- javascript - MongoDB 通过元素编号修改对象字段的数组,无需 findAndModify 或更新查询
- css - 无法使用网站的移动视图滚动
- python - 使用 python 向 JSON 文件添加新条目
- web-applications - 客户端-服务器场景的最佳 PayPal Web 应用程序工作流程是什么?
- reactjs - react-three-fiber 自定义着色器中的 WebGL 在道具更改或窗口调整大小时冻结