上次我问过一些人,我该怎么做才能验证程序中的用户输入。我很高兴有足够的人在这个领域有新手的时间。作为他们的建议,我被介绍给正则表达式。循环是我的首选,但在某些情况下似乎不起作用。我仍然很难理解正则表达式的工作原理并在线观看教程,通过网络跟踪解决方案对我来说也变得更加复杂。我承认我很糟糕。我快要开始学习C#了,所以我希望在使用正则表达式方面有更多的初学者方法,因为我只是想知道如何利用它来验证用户输入。顺便说一句。
所以这是我今天下午经过的代码,因为我正在竭尽全力在用户输入错误值时如何捕获用户。也是为了防止我的程序崩溃。
有人可以指导如何使用正则表达式正确过滤用户输入吗?网络上的解决方案是非特定的。我想过滤输入的姓名(全名)以及有效年龄(我可能会尝试询问出生日期并得出年龄值)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
namespace test_console
{
class Program
{
static void Main(string[] args)
{
Console.Write("pls input ur name: ");
string nametxt = Console.ReadLine();
string namePattern = @"[A-z]$";
if (!Regex.IsMatch(nametxt, namePattern))
{
Console.WriteLine("invalid name!");
nametxt = Console.ReadLine();
}
while (string.IsNullOrEmpty(nametxt))
{
Console.WriteLine("pls input a name!");
nametxt = Console.ReadLine();
}
Console.Write("now input ur age: ");
int age;
while (!int.TryParse(Console.ReadLine(), out age))
{ Console.WriteLine("invalid age!"); }
Console.WriteLine("hi {0}, you are {1} ", nametxt, age);
Console.ReadKey();
}
}
}
答案 0 :(得分:0)
如果您询问正则表达式,请使用模式进行名称验证
string namePattern = @"[A-z]$";
如果几乎肯定是错误的。现在,您正在寻找一个结束($
锚点)
[A-z] - exactly one character in A..z range
如果您向 Ascii表查询A..z
范围,则会发现它具有
A,..., Z, [, \, ], ^, _, `, a, ... z
个字符(请注意,不需要的 [
,]
,\
),这就是123[
是有效名称(结束的原因) 和[
都在有效范围内。您可能想要这样的模式:
string namePattern = @"^[A-Za-z]+$";
模式:
^ - string start
[A-Za-z]+ - one or many characters, each in A..Z or a..z range
$ - string end
因此,整个字符串必须至少包含一个字符,并且所有字符必须在A-Z
或a-z
范围内
答案 1 :(得分:0)
基于您的Regex表达式上方提供的代码,Text是错误的,例如,如果有人在名称中添加空格,它将检测为不是名称。
第二步,如果您想为名称添加正则表达式,则还要为年龄添加。
最后一个问题不是很清楚,也请您向我们详细介绍您要寻找的内容。