在 C# 中定义字母的范围

Posted

技术标签:

【中文标题】在 C# 中定义字母的范围【英文标题】:Defining The Range For Alphabets in C# 【发布时间】:2011-05-05 15:45:48 【问题描述】:

我在 C# 2.0 中创建标记表程序时遇到问题,这是它的代码

Console.WriteLine("Prislogix Public School");
Console.WriteLine("\n\nMarksheet\n\n");
Console.WriteLine("Enter Student Name : ");
string name = Console.ReadLine();
Console.WriteLine("\nEnter Class : ");
string cls = Console.ReadLine();
Console.WriteLine("\nEnter Roll Number : ");
int roll = int.Parse(Console.ReadLine());

这是基本的读写任务。我要创建的是名称的条件。例如,如果用户在姓名字段中输入 123,则将姓名视为 123。

我不希望它在名称字段中允许任何数字。如何才能做到这一点? 我是否必须为字母定义 ASCII 代码的范围?我认为将使用 do..while 循环,但我应该如何定义字母之间的范围(A 到 Z 或 a 到 z)。

【问题讨论】:

【参考方案1】:

你可以这样做:

if(!Regex.Matches(name, "^[a-zA-Z]+$"))
    // name is invalid

【讨论】:

【参考方案2】:

匹配正则表达式:

if (!Regex.Match(name, "^([A-Za-z ]+)$").Success)

  // Error message here.

这也将允许人名中有空格,这可能是您想要的。

更多关于 C# 正则表达式的信息:http://tim.oreilly.com/pub/a/oreilly/windows/news/csharp_0101.html

【讨论】:

【参考方案3】:
Match match = Regex.Match(name, @"[A-Za-z]+", RegexOptions.IgnoreCase);
// Here we check the Match instance.
if (match.Success)

...

【讨论】:

我相当肯定 'A-Za-z' 和 'RegexOptions.IgnoreCase' 的组合是多余的。 :)【参考方案4】:

您可以使用 RegEx 类并查看它是否与您的输入匹配。

【讨论】:

【参考方案5】:

您可以使用正则表达式。如果他们输入了无效条目,则拒绝该条目,显示一条消息并再次请求输入。您可以在 5 行中为每个 Console.ReadLine() 使用一个 while 循环来完成所有这些操作。

还有:

int roll = int.Parse(Console.ReadLine()); 

如果字符串包含任何非数字字符,int.Parse 将引发异常。

【讨论】:

【参考方案6】:

最简单的方法,也可能是最简单的方法是运行用户通过正则表达式输入的内容:

...
var validName = false;
 while (!validName)
 
    if(!Regex.Match(name, "^[A-Za-z ]+$")
      Console.WriteLine("Invalid name; try again");
    else
      validName = true;
 
...

【讨论】:

我使用 Visual Studio c# 2005 并且其中没有 Regex 类 你需要导入它所在的命名空间。以下是有关 Regex 类的更多详细信息:msdn.microsoft.com/en-us/library/…【参考方案7】:

如果测试是,字符串不应该包含任何数字(所有其他字符都是允许的),你可以使用正则表达式:

var regExContainsDigit = new Regex(@"\d");

if (regExContainsDigit.IsMatch(name)) 
   // contains at least 1 digit

如果名称仅允许使用字母,则变得更加复杂。然后你还应该考虑空格、点、带变音符号 (ë é) 的字母等。

【讨论】:

Regex 类在我的上下文中不存在 System.Text.RegularExpressions.Regex【参考方案8】:
string sPattern = "^[A-Za-z]+$"
bool isValid = false;
while(!isValid)

   Console.WriteLine("Enter Student Name : ");
   string name = Console.ReadLine();
   isValid = System.Text.RegularExpressions.Regex.Match(name, sPattern);

基本上根据正则表达式检查名称值,直到正确为止

【讨论】:

Regex 类不在我的上下文中 @Aliza:你真的试过这个吗?这应该有效。 System.Text.RegularExpressions.Regex 在 .NET 2.0 中可用。【参考方案9】:

你可以用一个简单的循环来做到这一点

string name = String.empty
do

  Console.WriteLine("Enter Student Name : ");
  name = Console.ReadLine()

while(!Regex.Match(name, "^([A-Za-z ]+)$").Success);

【讨论】:

它不起作用,在我的 Visual Studio c# 2005 中,ANY 类不存在 问题表明他使用的是 Visual Studio 2005(因此是 C# 2.0),它不支持 LINQ 扩展方法。 我的错。我错过了它是 C#2。答案已适当更新。

以上是关于在 C# 中定义字母的范围的主要内容,如果未能解决你的问题,请参考以下文章

C# 生成随机数自定义字母和数字个数

为啥在这个 C 代码中字母表被分成多个范围?

C#单纯的字母数字ASCII码转换

零基础学C# :判断字母

C# 数字和字母

按字母顺序插入列表 C#