字符串字母验证
本文关键字:验证 字符串 | 更新日期: 2023-09-27 18:21:08
我对字符串和int感到困惑,无法验证没有数字和奇怪字符的名称。a-z和a-z是好的。我理解do while循环和哨兵的使用。我在这里看到了Regex,但由于我不知道的原因,它在我的代码中不起作用。我宁愿使用一个我能理解的简单解决方案。我在代码中对int进行了验证,效果很好,但验证名称会出错。
static void Main(string[] args)
{
int age;
double mileage;
string strInput, name;
bool isValid;
DisplayApplicationInformation();
DisplayDivider("Start Program");
Console.WriteLine();
DisplayDivider("Get Name");
strInput = GetInput("your name");
name = strInput;
Console.WriteLine("Your name is: " + name);
Console.WriteLine();
do
{
DisplayDivider("Get Age");
strInput = GetInput("your age");
isValid = int.TryParse(strInput, out age);
if (!isValid || (age <= 0))
{
isValid = false;
Console.WriteLine("'" + strInput + "' is not a valid age entry. Please retry...");
}
}while (!isValid);
Console.WriteLine("Your age is: " + age);
//age = int.Parse(strInput);
//Console.WriteLine("Your age is: " + age);
Console.WriteLine();
do
{
DisplayDivider("Get Mileage");
strInput = GetInput("gas mileage");
isValid = double.TryParse(strInput, out mileage);
if (!isValid || (mileage <= 0))
{
isValid = false;
Console.WriteLine("'" + strInput + "' is not a valid mileage entry. Please retry...");
}
} while (!isValid);
Console.WriteLine("Your age is: " + mileage);
//mileage = double.Parse(strInput);
//Console.WriteLine("Your car MPT is: " + mileage);
TerminateApplication();
}
尽管我建议您使用简单的Regex,但您指出您想要一个不同的解决方案。
看看这个问题,第一个答案是Regex解决方案,但第二个答案可能会回答你的问题:
bool result = input.All(Char.IsLetter);
正如Chris Lively所指出的,如果你在名称中允许一个空格,那么你可以使用进行验证
bool result = input.Replace(" ", "").All(Char.IsLetter);
这里有一个Regex,适用于您想要的
Regex reg = new Regex("^[A-Za-z]+$");
do
{
DisplayDivider("Get Name");
strInput = GetInput("your Name");
isValid = reg.IsMatch(strInput);
if (!isValid)
{
isValid = false;
Console.WriteLine("'" + strInput + "' is not a valid name entry. Please retry...");
}
} while (!isValid);
基本上,它说,"匹配字符串的开始(^表示开始)和只有一个字母直到字符串的结束($表示字符串的结束),并且必须有一个或多个字母(这是+)"
可能是最简单的
现在,这当然是假设你不想要"名字姓氏",因为这意味着有一个空间。如果您需要空格分隔姓名,请告诉我。
坏男孩@Chris Lively的建议是更多的行,你想要一些易于阅读的东西,而不是RegEx
bool result = strInput.Replace(" ", "").All(Char.IsLetter);
if you are wanting to do it the long way with a forloop then look at this example
for (int i = 0; i < strinput.Length; i++)
{
//if this character isn't a letter and it isn't a Space then return false
//because it means this isn't a valid alpha string
if (!(char.IsLetter(strinput[i])) && (!(char.IsWhiteSpace(strinput[i]))))
return false;
}