检查是否仅输入长度和数字

时间:2019-01-24 05:50:35

标签: c# regex string input

我正在尝试编写代码,使其不接受仅字母数字 并且还会检查剪贴板的范围。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;
     }

1 个答案:

答案 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

Demo

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:基本上,正则表达式甚至可以与无效数据进行交互,最终它只能从错误的“第一个样本” 中提取正确的模式,并且将会拒绝我们不想要的“第二简单”