Регулярное выражение URL в Django: сделать так, чтобы URL допускал значения типа int или float - PullRequest
2 голосов
/ 21 марта 2012

формат URL-адреса: домен / startValue / endValue / content

здесь startValue и endValue принимают либо целые числа, либо числа с плавающей запятой.

я пробовал: /(\d+)/(\d+), который принимает значения типа int

и:

/(\d+\.\d+)/(\d+\.\d+), который принимает значения с плавающей точкой

, но не знает, как их собрать, что принимает оба формата чисел

пробовал:

 /(\d+)|(\d+\.\d+)/(\d+)|(\d+\.\d+)

браузер сказал, что URL не соответствует параметрам функции просмотра

спасибо за любой совет!

Ответы [ 4 ]

6 голосов
/ 21 марта 2012

Поскольку вы всегда начинаете с int, просто сделайте часть с плавающей точкой необязательной, используя оператор регулярного выражения ?, и используйте группу без захвата:

intorfloat_re = "(\d+(?:\.\d+)?)"

.. и используйте эту строку вВаше определение URL.

4 голосов
/ 30 мая 2013

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

использование

intorfloat_positiveornegative_re = "(-?\d+(?:\.\d+)?)"

если вы хотите, чтобы он принимал как отрицательные, так и положительные целые числа или числа с плавающей запятой

Кстати, я объединил этот ответ с ответом на этот вопрос: Regex для сопоставления отрицательного числа в диспетчере URL Django?

2 голосов
/ 21 марта 2012

Вы пытаетесь вернуть слишком много групп из соответствия регулярному выражению. Попробуйте вместо этого:

(\d?\.\d+|\d+)

Это будет соответствовать 0-1 цифрам, затем., Затем одной или нескольким цифрам. Он также первым получает число с плавающей запятой, поэтому вы не получите первую цифру вместо числа с плавающей запятой.

1 голос
/ 01 сентября 2018

это может быть старым, но только для соучастия, что-то вроде этого может быть более полезным и безопасным

"-?\d{1,3}(\.\d{1,5})?"

и вы можете указать желаемый диапазон

...