如何验证当粘贴到文本框

本文关键字:文本 何验证 验证 | 更新日期: 2023-09-27 18:07:50

我写了一个小程序。它几乎像我想的那样工作,我只是有一个问题。我正在尝试复制我在其他程序中找到的所有功能。

我有一个文本框,当用户可以写一个电话号码。首先,他只允许使用数字和"+"answers"-",所以我使用:

    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"图标,当数字以适当的格式给出时,它会变成"tick"。

它对我来说是完美的(就像我正在复制的程序一样)-当用户在文本框中写东西时,他只能使用数字和"+"answers"-",当格式ok时图标改变,当其他文本框也ok时,ok按钮启用。

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

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


我试过这样做。这导致当只粘贴数字时,"+"answers"-"保持原样,但用户不能写任何东西。
我还是个初学者。也许我犯了个小错误?

    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中的文本是否包含一些不需要的元素,但我不知道如何检查它。如您所见,它只检查一个不需要的元素。

如何验证当粘贴到文本框

首先,请使用TRY-Catch进行转换。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

当然这只是一个简单的解决方案,但是你可以根据自己的需要配置它。或者如果你想要更复杂的方法,你可以使用正则表达式…以数字或+ -开头,但不能包含字母字符。根据您的要求

这就是我所做的,它有效:)我只会添加try-catch块,如Krekkon所建议的。

    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();
        }

也许将来会对别人有帮助。

也许你应该这样尝试:让第一个版本的phoneNumberValidity方法保持原样,然后检查tb文本是否有一些不需要的元素,删除它们