如何验证当粘贴到文本框
本文关键字:文本 何验证 验证 | 更新日期: 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文本是否有一些不需要的元素,删除它们