Регулярно разрешать только числа от 100 до 999999 - PullRequest
1 голос
/ 24 августа 2011

Может ли кто-нибудь помочь с кодом C # с помощью регулярных выражений для проверки текстового поля, которое принимает только цифры от 100 до 999999

Спасибо, Луи.

Ответы [ 8 ]

9 голосов
/ 24 августа 2011

Для этого вам не нужно регулярное выражение.

int n;
if (!int.TryParse(textBox.Text.Trim(), out n) || n<100 || n>999999)
{
  // Display error message: Out of range or not a number
}

РЕДАКТИРОВАТЬ: если целевой CF, то вы не можете использовать int.TryParse().Вместо этого откройте int.Parse() и наберите немного больше кода для отлова ошибок:

int n;
try
{
  int n = int.Parse(textBox.Text.Trim());
  if (n<100 || n>999999)
  {
    // Display error message: Out of range
  }
  else
  {
    // OK
  }
}
catch(Exception ex)
{
   // Display error message: Not a number. 
   //   You may want to catch the individual exception types 
   //   for more info about the error
}
3 голосов
/ 24 августа 2011

Ваше требование переводится от трех до шести цифр, сначала не ноль. Я не могу вспомнить, привязывает ли C # RE по умолчанию, поэтому я тоже добавил их.

^[1-9][0-9]{2,5}$
1 голос
/ 24 августа 2011

Это поможет:

^[1-9]\d{2,5}$
1 голос
/ 24 августа 2011

Вы должны использовать регулярные выражения?Как насчет

int result;
if(Int.TryParse(string, out result) && result > 100 && result < 999999) {
    //do whatever with result
}
else
{
    //invalid input
}
1 голос
/ 24 августа 2011

Простой подход - использовать регулярное выражение

^[1-9][0-9]{2,5}$

Если вы хотите разрешить начальные нули (но сохраняете ограничение в 6 цифр), регулярное выражение будет

^(?=[0-9]{3,6}$)0*[1-9][0-9]{2,5}

Этот последний, вероятно, заслуживает некоторого объяснения: сначала он использует положительный прогноз [(?=)], чтобы убедиться, что весь ввод состоит из 3-6 цифр, а затем он проверяет, что он состоит из любого числа ведущих нулей, за которыми следует по номеру в диапазоне 100-999999.

Однако , возможно, будет хорошей идеей использовать что-то более подходящее для этой задачи (возможно, числовое сравнение?).

0 голосов
/ 24 августа 2011

И, возможно, принимает лидирующие нули:

^0*[1-9]\d{2,5}$
0 голосов
/ 24 августа 2011

Почему бы не использовать вместо него элемент управления NumericUpDown , который позволяет указывать минимальное и максимальное значения?И это также будет разрешать только числа, сохраняя вам дополнительную проверку, чтобы гарантировать, что все нечисловые могут быть введены

Из примера:

public void InstantiateMyNumericUpDown()
{
   // Create and initialize a NumericUpDown control.
   numericUpDown1 = new NumericUpDown();

   // Dock the control to the top of the form.
   numericUpDown1.Dock = System.Windows.Forms.DockStyle.Top;

   // Set the Minimum, Maximum, and initial Value.
   numericUpDown1.Value = 100;
   numericUpDown1.Maximum = 999999;
   numericUpDown1.Minimum = 100;

   // Add the NumericUpDown to the Form.
   Controls.Add(numericUpDown1);
}
0 голосов
/ 24 августа 2011

другой подход, который вы могли бы рассмотреть

[1-9]\d{2,5}

...