抛出验证消息以接受基于ASCII值的输入

时间:2014-12-03 14:14:06

标签: c# asp.net wpf winforms

我是C#>的新手; Iam为Windows创建应用程序> 我使用c#在WPF中创建Windows窗体。语言>

我在表格1中有三个文本框,三个标签和两个按钮。>

在其中一个文本框中,我只能接受[A .... Z,a .... z&一些特殊字符(&,$)和(。,)]>  考虑到输入的ASCII代码,我必须使用Aceept数据... 对于EX:A​​的ASCII码是65.>           @的ASCII码是64。

如果用户正在键入除上述之外的任何其他数据..我必须使用消息框抛出验证消息。>

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

我尝试了一些基本的If else语句,但它消耗了更多的内存..

1 个答案:

答案 0 :(得分: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];
    }
}