Как проверить, что символ не включен в строку в Rails 5? - PullRequest
0 голосов
/ 04 апреля 2019

Мне нужно сохранить Regex как текст в моей базе данных, пользователи должны иметь возможность изменять его из пользовательского интерфейса, мне нужно проверить, что пользователи не будут вводить неэкранированную косую черту (/) в форме.

Я не нашел ничего об исключении символов или, если , это даже возможно.

Пока мой класс выглядит примерно так:

class Setings < Trigger
  REGEX = /this is/

  # Validations
  # -----------------------------

  validates :rest_period,   numericality: { only_integer: true, greater_than: 0 }, if: :rest_period?
  validates :custom_regex,  presence: true, format: { with: REGEX, allow_blank: true, message: "must be a valid Regex" },
end

Мне нужно проверить это, поскольку пользователь может ввести символ, который может нарушить более позднюю функцию в каком-либо другом программном классе.

У меня есть несколько тестов RSpec для этой функции

describe Settings do
  context "when invalid" do
    subject { Settings.new }

    context "when completion_page] is not a valid regex" do
      before          { subject.completion_page = "^Applicant Information.*" } # This should be valid
      it("has error") { expect(subject.errors.full_messages).not_to include "Must be a valid Regex" }
    end

    context "when completion_page] includes unescaped forward slashes" do
      before          { subject.completion_page = "/^Applicant Information.*/" } # This should be invalid
      before          { is_expected.to be_invalid }
      it("has error") { expect(subject.errors.full_messages).to include "Must be a valid Regex" }
    end
  end
end

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Попробуйте это:

REGEX = /\A((?![^\\]\/).)*\z/

Обнуляет строки с / без предшествующего \.

0 голосов
/ 04 апреля 2019

Вы должны попробовать это регулярное выражение, чтобы найти строку, которая не содержит неэкранированной косой черты:

REGEX = /\A((?!\/).)*\z/

Ответ на тот же вопрос здесь объясняет, почему мы выбираем регулярное выражение следующим образом: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...