Как добавить проверку с плавающей точкой к Vue путям роутеров? - PullRequest
0 голосов
/ 07 февраля 2020

По некоторым причинам я не могу заставить работать с плавающей точкой в ​​vue путях маршрутизатора.

/category/:category(\d+)/:post([-+]?([0-9]*\.[0-9]+|[0-9]+))

У меня есть числа для работы с : категория (\ d +)
Но по какой-то причине подобное регулярное выражение не работает : post ([- +]? ([0-9] *. [0-9] + | [0-9] +))

Всякий раз, когда я проверяю это с javascript, это работает. Но он не работает, когда я помещаю его в путь, как указано выше.

/[-+]?([0-9]*\.[0-9]+|[0-9]+)/.test(6.5) // MATCHES  /category/196/6.5
/[-+]?([0-9]*\.[0-9]+|[0-9]+)/.test(6) // MATCHES /category/196/6

Числа, которым я хотел бы соответствовать:

10
65.5
.55

Если у кого-то есть идея, как решить эту проблему, пожалуйста, дайте я знаю!

1 Ответ

1 голос
/ 07 февраля 2020

Обновление:

Версия path-to-regexp, используемая Vue Маршрутизатор - 1.7.0 ... i sh. Точный способ, которым это затягивается, сложен, но я считаю, что 1.7.0 дает лучшее совпадение.

Имея это в виду, я придумал следующее:

path: '/category/:category([0-9]+)/:post([-+]?[0-9]*\\.?[0-9]+)',

Это немного отличается от мой первоначальный ответ, но его также можно протестировать с помощью сайта тестирования, о котором я упоминал, если вы измените версию на 1.7.0.

Я проверил это с Vue Router, и мне показалось, что он работает. Я не тестировал его с Nuxt.

Здесь уловка в том, что он не делает особый случай для целых чисел, они автоматически сопоставляются, делая точку необязательной. Это избавляет от некоторых специальных символов с пути, оставляя меньше возможностей для этого, чтобы отвратиться от безумия path-to-regexp.

Оригинальный ответ:

Я немного поэкспериментировал с использованием Express Route Tester, который, как мне кажется, использует ту же библиотеку path-to-regexp, что и Vue -Router / Nuxt:

https://forbeslindesay.github.io/express-route-tester/

Мне показалось, что это сработало:

/category/:category(\d+)/:post([-+]?(\d{0,}.\d+|\d+))

Изменения:

  1. Удалены лишние косые черты.
  2. Удалены обратная коса sh перед точкой.
  3. Изменено * на {0,}, в противном случае оно преобразуется в .*, и такие вещи, как 12xxx.34 будут совпадать.
  4. Изменено [0-9] на \d. Либо хорошо, и если вам нужно записать это как строку, может быть проще использовать [0-9], чтобы уклониться от побега sla sh. Что бы вы ни выбрали, будьте последовательны.
...