我正在尝试编写代码,使其不接受仅字母数字 并且还会检查剪贴板的范围。gettext像这种格式
000_2019_1_20181234_111111111111
我复制时成功获得了一些代码
000_2019_1_20181234_111111111111
它将粘贴
2019_1_20181234_111111111111
但是当我复制2019_1_2
时它会接受,我想自动拒绝它,当它有字母时检测并删除它
我复制
0aa_2019_1_20181234_1111AA111111
它将得到类似
的结果 2019_1_20181234_1111
,我也复制了
2019_1_2A181234_1111
将显示为无效。
并且2019_1_2
显示无效。我也想接受的格式是这种2019_1_20181234_1
public void txtboxBatch_Click(object sender, EventArgs e)
{
string copyBatchnumber = Clipboard.GetText();
string batchNumber;
batchNumber = copyBatchnumber.Replace("100_", "").Replace("000_", "")
.Replace("001_", "").Replace("002_", "")
.Replace("[a-z]", "").Replace("003_", "");
Regex regex = new Regex("^[0-9,_]+$");
if (regex.IsMatch(batchNumber))
{
{
MessageBox.Show("ok");
}
}
else
{
MessageBox.Show("invalid batchnumber");
}
txtboxBatch.Text = batchNumber;
}
答案 0 :(得分:0)
您可以使用正则表达式获取模式,而不必替换不需要的输出。
正则表达式:
(.*?_)?(\d{4}_\d{1}_\d{8}(_\d+))(?!.*\w)
正则表达式说明:
(.*?_)? ---> every thing with non-greedy _ , it can exist or not
(\d{4}_\d{1}_\d{8}(_\d+)) ---> Our desired pattern
(?!.*\w) ---> negative look ahead in case we have 0aa_2019_1_20181234_1111AA111111
C#代码:
string pattern = @"(.*?_)?(\d{4}_\d{1}_\d{8}(_\d+))(?!.*\w)";
Regex regex = new Regex(pattern, RegexOptions.Singleline);
string Data1 = @"0aa_2019_1_20181234_111111111111";
string Data2 = @"2019_8_8";
// First Sample
Match Re = regex.Match(Data1);
if(Re.Groups.Count < 2)
Console.WriteLine("Invalid Input!");
else
Console.WriteLine(Re.Groups[2]);
// Second Sample
Re = regex.Match(Data2);
if (Re.Groups.Count < 2)
Console.WriteLine("Invalid Input!");
else
Console.WriteLine(Re.Groups[2]);
输出
2019_1_20181234_111111111111
Invalid Input!
PS:基本上,正则表达式甚至可以与无效数据进行交互,最终它只能从错误的“第一个样本” 中提取正确的模式,并且将会拒绝我们不想要的“第二简单” 。