Снимок сделан в последнем списке приложений (Huawei p9)

Проанализируйте проблему

Если вы «должны» использовать регулярное выражение, пропустите проблему, проанализировав принятые перестановки.

«диапазон от -2055 до 2055» может быть выраженный как:

  • необязательный -
  • необязательные начальные нули
  • , за которым следует число от 0 до 2055

«Число от 0 до 2055» может быть одним из конечного числа конкретных перестановок:

  • одна цифра (0-9)
  • две цифры (10- 99)
  • три цифры (100-999)
  • четыре цифры, начинающиеся с 1 (1000-1999)
  • четырехзначных цифр, начиная с 20 (2000-204 * 9)
  • четыре цифры, начинающиеся с 205 (2050-2055 *)

Обратите внимание, что для этого регулярного выражения нет необходимости различать диапазон " 0-9 "и" 1-9 ", и только последние два диапазона имеют какие-либо ограничения на диапазон принятых цифр / символов (обозначенных звездочкой).

Записывать выражения регулярных выражений

. Каждая из вышеуказанных составных частей легко индивидуально выразить как регулярное выражение:

  • -?
  • 0 * [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] 1 [0-9] [0-9] [0-9 ] 20 [0-4] [0-9] 205 [0-5]

Поместите выражения вместе

. Соответствующим выражением для всего совпадения будет:

-?0*([0-9]|[0-9][0-9]|[0-9][0-9][0-9]|1[0-9][0-9][0-9]|20[0-4][0-9]|205[0-5])

Или немного более сжато:

-?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])

Предполагая , вход содержит только «число» и ничего больше, поэтому последнее регулярное выражение :

^-?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])$

Если необходимо разрешить знак ведущего плюса, это становится:

^[-+]?0*([0-9]{1,3}|1[0-9]{3}|20[0-4][0-9]|205[0-5])$

Вот сценарий js , демонстрирующий, что проходит и что не удастся последнему регулярному выражению.

0
задан Ening 13 July 2018 в 12:39
поделиться