Проверьте, если длина ввода и только цифры - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь кодировать, что он не будет принимать буквы только цифры а также он проверит диапазон clipboard.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 голосов
/ 24 января 2019

Вы можете использовать регулярное выражение для получения шаблона без необходимости замены нежелательного вывода.

Регулярное выражение:

(.*?_)?(\d{4}_\d{1}_\d{8}(_\d+))(?!.*\w)

Regex Объяснение:

(.*?_)? ---> 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: По сути, регулярное выражение может взаимодействовать даже с недействительными данными, в конце концов оно извлечет только правильный шаблон из неправильного «Первый образец» и отклонит его «Второй простой» , что не то, что мы хотим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...