я разрабатываю приложение, в котором пользователи вводят регулярное выражение в качестве критерия фильтрации, однако я не хочу, чтобы люди (легко) могли вводить . *
(т.е. совпадать с чем угодно). Проблема в том, что если я просто использую if (expression == ". *")
, то это можно легко обойти, введя что-то вроде . *. *
.
Кто-нибудь знает о тесте, который мог бы взять кусок регулярного выражения и проверить, является ли он по существу . *
, но в несколько более сложной форме?
Мои мысли:
Я мог бы видеть если выражение является одним или несколькими повторениями . *
, (т.е. если оно соответствует (\. \ *) +
(кавычки / экранирования могут быть не совсем точными, но вы получите Проблема заключается в том, что могут быть другие формы записи глобального совпадения (например, с $
и ^
), которые слишком исчерпывающие, чтобы даже думать о них заранее, не говоря уже о test.
Я мог бы протестировать с его помощью несколько случайно сгенерированных строк и предположить, что, если все они пройдут, пользователь ввел глобально соответствующий шаблон. Проблема с этим подходом состоит в том, что могут возникнуть ситуации, когда выражение достаточно плотное и Я просто выбираю плохие строки, чтобы сопоставить их.
Кто-нибудь думает?
(К вашему сведению, приложение написано на Java, но я предполагаю, что это скорее алгоритм, чем вопрос для конкретного языка.)