Регулярное выражение для разрешения чисел от -90,0 до +90,0

Какое регулярное выражение допускает числа от -90,0 до +90,0? Числа между ними могут быть плавающими или целыми числами.

3 ответа

Решение

Я не думаю, что вы хотите использовать Regex для этого. использование Double.Parse() (или же Double.TryParse()), если ваши данные хранятся в строке, а затем проверьте полученное значение, чтобы убедиться, что оно попадает в требуемый диапазон. Например:

public bool IsInRange(string value)
{
   bool isInRange = false;

   double parsed = 0;
   if (Double.TryParse(value, out parsed))
   {
      // use >= and <= if you want the range to be from -90.0 to 90.0 inclusive
      isInRange = value > -90.0 && value < 90.0;
   }

   return isInRange;
}

Если ваша ценность уже double тогда еще проще - разбор не требуется.

Не то, чтобы вы действительно хотели использовать Regex здесь (вместо этого вы должны проанализировать его и выполнить сравнение с числовым типом - таким как float или double). Но вы можете сделать это:

-?(\d|([1-8][0-9])(\.\d)?)|(90(\.0)?)

Это будет соответствовать от -90,0 до 90,0 включительно. Если вы хотите, чтобы он был эксклюзивным, удалите предложение 90.0.

  • отрицательный (необязательно):
    -?

  • одна цифра
    ИЛИ двойная цифра, 10-89
    \d|([1-8][0-9])
    ПЛЮС десятичное, 0-9 (необязательно):
    (\.\d)?

  • ИЛИ 90
    90
    ПЛЮС десятичный, 0 (необязательно):
    (\.0)?

Если вы хотите поддерживать больше десятичных знаков, измените предложение 0-89.9 на:

  • Удельная точность (семь, в данном случае) \d|([1-8][0-9])(\.\d{1,7})?
  • Бесконечная точность \d|([1-8][0-9])(\.\d+)?

Побег, если необходимо

"Некоторые люди, сталкиваясь с проблемой, думают:" Я знаю, я буду использовать регулярные выражения."Теперь у них две проблемы".

Это проблема, которую лучше решить с помощью чека. Но если вы хотите регулярное выражение, вы можете иметь регулярное выражение.

-?0*((90(\.0*)?)|([1-8]?\d(\.\d*)?))

будет работать, я думаю. Сопоставьте необязательный '-', за которым следует любое количество нулей, за которым следует либо 90 с любым количеством нулей, либо число, которое состоит из необязательной цифры в десятках от 1 до 8, за которой следует цифра единиц, за которой следует необязательный десятичный знак и десятичные разряды. Но вы понимаете, почему использование регулярных выражений для этого так грязно. Проверьте границы в виде чисел, а не серии цифр.

Простое регулярное выражение для знака опции +/- диапазона 90,0 с необязательным числом с плавающей запятой, равным 1 десятичному знаку, будет:

[-+]?90(?:\.0?)?|[-+]?(?:\d|[1-8]\d)(?:\.\d?)?

Расширенный

   #   [-+]  90.0

   [-+]? 90
   (?: \. 0? )?
|  
   #    [-+]  89.9  to   0.0
   #           0.0  to  89.9

   [-+]? 
   (?:
        \d 
     |  [1-8] \d 
   )
   (?: \. \d? )?
Другие вопросы по тегам