Все символы в строке должны соответствовать регулярному выражению

#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. У меня ушла половина рабочего дня, прежде чем я нашел эту тему и исправил свою проблему. Жаль, что я не могу дать этому ответу два голоса.