Регулярное выражение для разрешения чисел от -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? )?