我制作了这个简单的控制台应用程序,要求用户输入用户名和密码。
然后将数据保存在Db中。对于Db中的每一列,我为数据类型分配了数量有限的值。例如,密码(varchar(5)
必须最多包含5个字符。
using System;
namespace MyConto
{
public class NewUser
{
public static void NewUserRegistration()
{
Console.Write("Username: ");
string user = Console.ReadLine();
Console.Write("Password: ");
string pass = Console.ReadLine();
}
}
}
现在,我如何实时检查用户在控制台中写的内容?可能吗?
例如,一条消息警告用户,如果用户将"password"
写为密码,则字符串太长。
谢谢
答案 0 :(得分:2)
添加类似的验证方法:
private bool isValid(string input)
{
//my validation logic
}
并像这样使用:
...
string user = Console.ReadLine();
if (!isValid(user))
{
///my logic for warning the user that input is invalid
}
...
答案 1 :(得分:1)
如果您要一直询问用户直到提供有效密码,您可以执行以下操作:
string ObtainPassword()
{
string password;
string passwordErrorMessage;
while(true)
{
Console.Write("Password: ");
password = Console.ReadLine();
passwordErrorMessage = ValidatePassword(password);
if (passwordErrorMessage == null)
return password;
Console.WriteLine($"\r\n*** {passwordErrorMessage}");
}
}
密码验证方法如下:
string ValidatePassword(string password)
{
if(password.Length > 5) return "Password is too long";
//Add other validations here as needed
return null;
}
答案 2 :(得分:1)
我认为“实时”是指您不希望用户在看到消息之前先按ENTER键-因此,只要他们输入第6个字符,它就会告诉他们太长。您不能使用Console.ReadLine()来执行此操作,而可以可以使用Console.ReadKey()来执行此操作,尽管这需要很多努力……但仅仅是为了好玩:
class Program
{
static void Main(string[] args)
{
//First clear the screen. We need to have absolute knowledge of what's on
//the screen for this to work.
Console.Clear();
//hide the cursor as it has no real bearing on much....
Console.CursorVisible = false;
var user = GetLimitedInput("UserName?", 0, 10, true);
var password = GetLimitedInput("Password?", 4, 5, false);
Console.Clear();
Console.WriteLine($"User is {user} and password is {password}");
}
private static string GetLimitedInput(string prompt,
int lineToShowPromptOn, int maxChars, bool showChars)
{
//set cursor to the suggested position
Console.SetCursorPosition(0, lineToShowPromptOn);
//output the prompt.
Console.WriteLine(prompt);
Console.SetCursorPosition(0, lineToShowPromptOn + 1);
var finished = false;
var inputText = string.Empty;
while (!finished)
{
if (Console.KeyAvailable)
{
//remembr old input so we can re-display if required.
var oldInput = inputText;
var key = Console.ReadKey();
//check for CTRL+C to quit
if (key.Modifiers.HasFlag(ConsoleModifiers.Control) && key.KeyChar=='c')
{
inputText = string.Empty;
finished = true;
}
//allow backspace
else if (key.KeyChar == '\b')
{
if (inputText.Length > 0)
{
inputText = inputText.Substring(0, inputText.Length - 1);
}
}
//check for return & finish if legal input.
else if (key.KeyChar == '\r')
{
if (inputText.Length<=maxChars)
{
finished = true;
}
}
else
{
//really we should check for other modifier keys (CTRL,
//ALT, etc) but this is just example.
//Add text onto the input Text
inputText += key.KeyChar;
}
if (inputText.Length > maxChars)
{
//Display error on line under current input.
Console.SetCursorPosition(0, lineToShowPromptOn + 2);
Console.WriteLine("Too many characters!");
}
else
{
//if not currently in an 'error' state, make sure we
//clear any previous error.
Console.SetCursorPosition(0, lineToShowPromptOn + 2);
Console.WriteLine(" ");
}
//if input has changed, then refresh display of input.
if (inputText != oldInput)
{
Console.SetCursorPosition(0, lineToShowPromptOn + 1);
//do we show the input?
if (showChars)
{
//We write it out to look like we're typing, and add
//a bunch of spaces as otherwise old input may be
//left there.
Console.WriteLine(inputText+" ");
}
else
{
//show asterisks up to length of input.
Console.WriteLine(new String('*', inputText.Length)+" ");
}
}
}
}
return inputText;
}
}
注意:这有很多缺陷,但这只是出于说明目的:)
答案 3 :(得分:0)
我最终得到了这个
using System;
namespace MyConto
{
public class NewUser
{
public static void NewUserRegistration()
{
Console.Write("Username: ");
string user = Console.ReadLine();
Console.Write("Password: ");
string pass = Console.ReadLine();
while (pass.Length > 5)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Insert a valid password (max 5 chars)\n");
Console.ForegroundColor = ConsoleColor.White;
Console.Write("Password: ");
pass= Console.ReadLine();
}
}
}
}