#python #regex #yaml #pyyaml
#язык JavaScript #регулярное выражение
Вопрос:
Мне жаль, если это было раньше, но я не могу найти в Google ничего, что дает то, что я хочу.
У меня есть поле , в котором вы можете писать выражения: xgt;1
и xgt;2||xlt;1
(xgt;1) amp;amp; (xlt;2)
т. Д. Мне нужно регулярное выражение, которое проверяет выражение, чтобы оно могло содержать только определенные допустимые символы для защиты от внедрения кода. a.1
не должно совпадать.
До сих пор я использую это:
expression.match('[xXlt;gt;=|0-9amp;().]')
Но это также возвращает все, что содержит любой из этих символов. То, что мне нужно, — это выражение, которое возвращается только в том случае, если все символы соответствуют любому из тех, которые указаны в регулярном выражении.
Ответ №1:
Вам нужен *
или
количественный показатель после вашего класса персонажа и якорей:
/^[xXlt;gt;=|0-9amp;()s.]*$/.test(expression) ^ ^^
Теперь он будет соответствовать
^
— начало строки[xXlt;gt;=|0-9amp;s().]*
— ноль или более (если вы используете$
— конец веревки.
Короткая демонстрация:
console.log(/^[xXlt;gt;=|0-9amp;s().]*$/.test("a.1")); console.log(/^[xXlt;gt;=|0-9amp;s().]*$/.test("(xgt;1) amp;amp; (xlt;2)"));
Обратите внимание, что я также добавил s
соответствующие пробелы.
Комментарии:
1. Поскольку
(xgt;1) amp;amp; (xlt;2)
содержит пробелы, я также предлагаю добавитьs
их в шаблон.2. Я попробовал
new RegExp('/^[xXlt;gt;=|0-9amp;().]*$/').test(expression)
, где выражение =xgt;1
, и это дало мне ложное3. Конечно, это даст вам ложь, так как ваш
xgt;1
не содержит/
до начала и/
после конца строки. Не используйте конструктор регулярных выражений, используйте литерал регулярных выражений:/^[xXlt;gt;=|0-9amp;s().]*$/.test("xgt;1")
4. О, так что, если вы не используете конструктор регулярных выражений, вам нужно добавить / в начале и в конце, чтобы сообщить компилятору, что это регулярное выражение? Зачем использовать это вместо конструктора?
5. У меня ушла половина рабочего дня, прежде чем я нашел эту тему и исправил свою проблему. Жаль, что я не могу дать этому ответу два голоса.