c# - 基本用户输入验证//需要指南
问题描述
上次我在这里问了一些人关于我可以做些什么来验证我的程序中的用户输入。我很高兴有足够多的人有时间在这个领域做新手。作为他们的建议,我被介绍给正则表达式。循环是我的第一个选择,但在某些情况下似乎不起作用。我仍然很难理解正则表达式的工作原理和在线观看教程,也通过在网上遵循解决方案使其对我来说更加复杂。我承认我不擅长。我几乎是在学习 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();
}
}
}
解决方案
如果您询问正则表达式,则为名称验证模式
string namePattern = @"[A-z]$";
如果几乎肯定是错的。现在您正在寻找一个以(锚点)结尾的字符串$
[A-z] - exactly one character in A..z range
如果您查阅Ascii 表的A..z
范围,您会发现它有
A,..., Z, [, \, ], ^, _, `, a, ... z
字符(注意,不需要 [
的]
,,,\
),这就是为什么123[
是有效名称(它以[
which is in valid range结尾)。你,可能想要这样的模式:
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
范围内
推荐阅读
- reactjs - React:在 useEffect 中调用上下文函数时防止无限循环
- typescript - 类型“字符串”不可分配给类型“T[K]”
- r - 我无法绘制此图形
- azure-devops - Azure 管道 - 精确的 .net 核心版本
- vue.js - Vue:在触发转换之前更新转换名称不会呈现新的转换
- hadoop - 基于 Azure 的 Hadoop 集群 (HDInsight) 如何转换为经典的本地 Hadoop 集群
- android - (颤抖)我怎样才能在课堂上争论?
- google-cloud-platform - 默认情况下使用 GCP 的 SendGrid 配置是否注册特定域?
- php - 使用令牌的 Laravel Web 登录
- mongodb - 嵌入式文档数组上的 MongoDB 多键索引 - 排序/范围比较和 min/maxkey