Проверка слагов в правилах безопасности Firebase

Я хотел бы проверить, являются ли вставленные слаги такими, какими они должны быть, и имеют ли они следующую функцию в Bolt:

slugify(s) = s.toLowerCase().replace(/[^\w ]+/g,'').replace(/ +/g,'-')

используется как:

validate() = $slug == slugify($this.title)

Однако модификатор регулярного выражения g, похоже, не поддерживается. Есть ли другие способы / лучшие практики для достижения моей цели?


person Vincent den Boer    schedule 07.01.2016    source источник
comment
Кажется, что replace() здесь вообще не допускает регулярных выражений.   -  person Wiktor Stribiżew    schedule 07.01.2016
comment
Да, тоже заметил это :( На данный момент я просто отказался от проверки слагов, но очень хотелось бы как-то это решить...   -  person Vincent den Boer    schedule 08.01.2016


Ответы (1)


Лучшее, что вы можете сделать с разрешенными строковыми операторами, — это убедиться, что ваша строка выглядит как слаг.

type Slug extends String {
  validate() = this.test(/^([a-z0-9]+-)+[a-z0-9]+$/);
}

Вот несколько тестов против этого шаблона:

  .write('this-is-a-slug')
  .succeeds("Typical slug text.")

  .write('numbers-2016-ok')
  .succeeds("Numbers are ok.")

  .write('double--hyphen')
  .fails("Double hyphen not ok.")

  .write('-leading-hyphen')
  .fails("Leading hyphen not ok.")

  .write('trailing-hyphen-')
  .fails("Trailing hyphen not ok.")

  .write('nohyphen')
  .fails("Must have at least one hyphen.")

  .write('no-Upper')
  .fails("No upper case.")

  .write('no-special&-char')
  .fails("No special characters.")

  .write('no spaces')
  .fails("No spaces allowed.")

Вы можете найти больше примеров RegExp здесь

person mckoss    schedule 09.01.2016