c#粘贴到文本框时如何验证

时间:2014-06-08 09:53:00

标签: c# validation paste

我写了一个小程序。它几乎按照我的意愿工作,我只有一个问题。我正在尝试复制我在其他程序中找到的所有功能。

我有一个TextBox,当用户可以写一个电话号码。首先,他只允许使用数字和“+”和“ - ”,所以我使用:

    private void textBoxPhoneNumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((char.IsDigit(e.KeyChar) == false) && (e.KeyChar != '+') && (e.KeyChar != '-') && (e.KeyChar != '\b')) e.Handled = true;
        }

然后我希望电话号码为特定格式(+ 12-34-1234567),所以我使用:

    private bool IsPhoneNumberCorrect(string name)
        {
            return Regex.IsMatch(name, @"^+\+[0-9]{2}-[0-9]{2}-[0-9]{7}$", RegexOptions.None);
        }

最后这个(使用TextChange):

    private void phoneNumberValidity(object sender, EventArgs e)
    {
        counter4 = Convert.ToInt32(IsPhoneNumberCorrect(textBoxPhoneNumber.Text));
        pictureBoxPhoneNumber.Image = imageList1.Images[counter4];
        checkIfOk();
        textBoxPhoneNumber.Focus();
    }

我使用counter4作为启用按钮的方法(checkIfOk)的一部分。当数字以适当的格式给出时,还有一个“X”图标变为“勾号”。

它非常适合我(就像我正在复制的程序一样) - 当用户在TextBox中写入内容时,他只能使用数字和“+”和“ - ”,当格式正常时,图标会发生变化当其他文本框也正常时,Ok buton启用。

现在,最后,问题是:
我可以从剪贴板中粘贴一些东西。在原始程序中,当我用字母,数字和其他符号粘贴东西时,只剩下数字和“+”和“ - ”。我的程序在这种情况下接受一切。

我一直在寻找可能有用的东西,但我发现的一切都非常复杂。有办法吗?


我试着这样做。这会导致仅粘贴数字时“+”和“ - ”保持原样,但用户无法写入任何内容。
我还是个初学者。也许我犯了一个简单的错误?

    private void phoneNumberValidity(object sender, EventArgs e)
    {
        Regex regex = new Regex("[^0-9-+]");
        if (regex.IsMatch(Clipboard.GetText()))
        {
            counter4 = Convert.ToInt32(IsPhoneNumberCorrect(textBoxPhoneNumber.Text));                
            pictureBoxPhoneNumber.Image = imageList1.Images[counter4];
            string output = regex.Replace(Clipboard.GetText(), "");
            textBoxPhoneNumber.Text = output;
            checkIfOk();
            textBoxPhoneNumber.Focus();
        }
    }

我正在尝试做这样的事情:

    private void phoneNumberValidity(object sender, EventArgs e)
    {
        counter4 = Convert.ToInt32(IsPhoneNumberCorrect(textBoxPhoneNumber.Text));
        pictureBoxPhoneNumber.Image = imageList1.Images[counter4];
        checkIfOk();
        textBoxPhoneNumber.Focus();

        Regex regex = new Regex("[^0-9-+]");
        if (textBoxPhoneNumber.Text.Contains("a"))
        {
            if (regex.IsMatch(Clipboard.GetText()))
            {
                string output = regex.Replace(Clipboard.GetText(), "");
                textBoxPhoneNumber.Text = output;
            }
        }
    }

我知道这不是我想要的,但也许有人可以提供一些线索...... 一般我认为,我想检查tb中的文本是否包含一些不需要的元素,但我不知道如何检查它。如您所见,它只检查一个不需要的元素。

3 个答案:

答案 0 :(得分:1)

首先,请使用TRY-Catch for Convert.ToInt32!

第二:使用TextChanged事件,并使用TextBox的实际内容验证输入

要验证,您可以执行类似的操作:

string output = ""
string clipboardText = GetClipboardText()
for each chara in clipboardText's characters
    if chara.isNumeric or chara=='+' or chara == '-'
         output += chara
end foreach

当然它只是一个简单的灵魂,但你可以随心所欲地设置它。 或者如果你想要更复杂的方式,你可以使用正则表达式...从数字开始或+ - 但不包含字母字符。根据您的要求。

答案 1 :(得分:0)

这就是我所做的,它的工作原理:)我只会像Krekkon建议的那样添加try-catch块。

    private void phoneNumberValidity(object sender, EventArgs e)
    {
        counter4 = Convert.ToInt32(IsPhoneNumberCorrect(textBoxPhoneNumber.Text));
        pictureBoxPhoneNumber.Image = imageList1.Images[counter4];
        if (Regex.IsMatch(textBoxPhoneNumber.Text, "[^0-9-+]"))
        {
            Regex regex = new Regex("[^0-9-+]");
            string output = regex.Replace(Clipboard.GetText(), "");
            textBoxPhoneNumber.Text = output;
        }
        checkIfOk();
        textBoxPhoneNumber.Focus();
        }

将来可能会有所帮助。

答案 2 :(得分:-1)

也许您应该尝试这样:保留第一个版本的phoneNumberValidity方法,然后检查tb Text是否有一些不需要的元素,摆脱它们。