2014-12-03 33 views
1

我是C#的新手> Iam为Windows创建应用程序> iam使用c#在WPF中创建窗体窗体。语言>投掷验证消息以接受基于ASCII值的输入

我有三个文本框,三个标签,并在表格1>

在文本框中的一个两个按钮,我不得不接受只有[A .... Z,一... .z &一些特殊字符(&,$)和(。,)]> 我必须考虑输入ASCII码的Aceept数据... 对于EX:A​​的ASCII码是65.> @的ASCII码是64.

如果用户输入除上述提到的任何其他数据,我必须在消息框中输入验证消息>

MessageBox.show(“请输入有效数据”);

我已经尝试了一些基本的如果else语句,但它消耗更多的内存量..

+0

那么你的问题是什么? – 2014-12-03 14:17:28

+0

而不是使用预定义的正则表达式逻辑被实现为接受输入,考虑到Alphabets的ASCII码,特殊字符。 @微软DN。 – 2014-12-03 14:20:40

+0

你使用正则表达式来检查这个吗? – 2014-12-03 14:21:26

回答

0

你可以尝试这样的事情,如果正则表达式是太慢:

using System; 
using System.Linq; 

namespace Demo 
{ 
    public static class Program 
    { 
     private static void Main() 
     { 
      string test = "thisIsTheStringToCheck!"; 

      bool anyInvalidChars = !test.All(isValidChar); 

      Console.WriteLine(anyInvalidChars); // Prints True due to the "!" in the string. 
     } 

     private static bool isValidChar(char ch) 
     { 
      if ('A' <= ch && ch <= 'Z') 
       return true; 

      if ('a' <= ch && ch <= 'z') 
       return true; 

      switch (ch) 
      { 
       case '&': 
       case '$': 
       case '.': 
       case ',': 
       // Add more cases as required. 
       { 
        return true; 
       } 

       default: 
       { 
        return false; 
       } 
      } 
     } 
    } 
} 

或者,写一个简单的CharValidator类使用像这样:

using System; 
using System.Linq; 

namespace Demo 
{ 
    public static class Program 
    { 
     private static void Main() 
     { 
      CharValidator validator = new CharValidator(); 

      validator.AddValidAsciiRange('A', 'Z'); 
      validator.AddValidAsciiRange('a', 'z'); 
      validator.AddValidAsciiChar('&'); 
      validator.AddValidAsciiChar('$'); 
      validator.AddValidAsciiChar('.'); 
      validator.AddValidAsciiChar(','); 

      string test = "thisIsTheStringToCheck!"; 

      bool anyInvalidChars = !validator.IsValidString(test); 

      Console.WriteLine(anyInvalidChars); // Prints True due to the "!" in the string. 
     } 
    } 

    public sealed class CharValidator 
    { 
     public void AddValidAsciiRange(char start, char end) 
     { 
      for (char ch = start; ch <= end; ++ch) 
       AddValidAsciiChar(ch); 
     } 

     public void AddValidAsciiChar(char ch) 
     { 
      if (ch >= 0 && ch <= 127) 
       _validAsciiChars[ch] = true; 
     } 

     public bool IsValidString(string str) 
     { 
      return str.All(IsValidChar); 
     } 

     public bool IsValidChar(char ch) 
     { 
      if (ch < 0 || ch >= 128) 
       return false; 

      return _validAsciiChars[ch]; 
     } 

     private readonly bool[] _validAsciiChars = new bool[128]; 
    } 
} 
+0

而不是使用普通字符。我需要使用ASCII码字符来检查用户输入。因此,对于每个客户需求的变化,我们都不需要添加CASE语句。@Matthew Watson – 2014-12-03 14:34:23

+0

@Kartiikeya您需要更清楚地指定您的需求。你将如何提供这些ascii代码? – 2014-12-03 14:35:17

相关问题