验证文本框是指定的格式

时间:2011-11-28 07:57:35

标签: c# .net winforms

如何以下列格式验证文本框输入?格式为:

"123dg-erf53-f5d5s-55dh5-gs45j"

3 个答案:

答案 0 :(得分:1)

您可以使用MaskedTextBox,或者如果功能不够,请为其TextChanged事件创建处理程序,并使用正则表达式验证文本。

答案 1 :(得分:0)

这是验证它的正则表达式:

"(([0-9a-zA-Z]){5}-){4}([0-9a-zA-Z]){5}"

答案 2 :(得分:0)

使用Otiels正则表达式,您可以执行以下操作:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        string regex = "(([0-9a-zA-Z]){5}-){4}([0-9a-zA-Z]){5}";

        this.textBox1.BackColor = Regex.IsMatch(this.textBox1.Text, regex) && !textBox1.Text == string.Empty ?
                            System.Drawing.Color.Green :
                            System.Drawing.Color.Red;
        if (this.textBox1.Text == string.Empty)
        {
            this.textBox1.BackColor = System.Drawing.Color.White;
        }
        else
        {
            this.textBox1.ForeColor = System.Drawing.Color.White;
        }
    }

在TextBox_TextChanged处理程序中(我的TextBox名称是textBox1)。 这可以很容易地添加到自定义控件中 - 从TextBox继承,附加到TextChanged事件并用此替换textBox1代码。

这样您就可以重复使用该控件。 您还可以添加一个属性,如公共字符串ValidationRegex {get;组;所以你可以传递不同的正则表达式,并能够验证任何东西,而不仅仅是许可证密钥。

MaskedTextBox也是一个有效的选项,具体取决于您需要实现的目标。

更新:上面的正则表达式将匹配一个包含5个组的字符串,每个组有5个字符,可以是字母(大写或小写)或数字。由于对此有评论,因此应修改正则表达式以容纳具有不同字符数的组。这是:

    string regex = "[0-9a-zA-Z]{6}-[0-9a-zA-Z]{5}-[0-9a-zA-Z]{5}-[0-9a-zA-Z]{5}-[0-9a-zA-Z]{6}";

这个正则表达式(尽管比Otiels提出的要长很多)将允许你控制每组中的字符数。 只需在上面的代码中替换它,它应该适用于一个包含6个字符的字符串,后跟两个5个字符的组,后跟一个6个字符的组。 顺便说一句,这将是我最初的提议(除了在原始答案中我在每个量词中都有5个),但我真的赞成Otiels解决方案对于初始任务比我的更优雅。