Правило Firestore Regex разрешает пробелы, но не должно начинаться или заканчиваться одним и не всеми пробелами - PullRequest
0 голосов
/ 04 августа 2020

Я создаю правило regex2 для display_name в Firestore. Что должно делать мое правило:

  1. Разрешить буквенно-цифровые c, а также заглавные буквы, длина строки должна быть 3-16 символов
  2. Разрешить пробелы, но не должно быть все пробелы
  3. Не начинать и не заканчивать пробелом.

Это мое текущее правило. Он удовлетворяет первому требованию, но я придерживаюсь следующих двух требований:

let string_rule = "^[a-zA-Z0-9_-]{3,16}$";

Я попытался добавить другое правило, например ^[^\s]+(\s+[^\s]+)*$, но оно выдало ошибки:

!  firestore.rules:29:30 - ERROR Missing a closing "
!  firestore.rules:29:30 - ERROR mismatched input 's' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||', '+', ';', '/', '*', '?', 'in', 'is'}
!  firestore.rules:29:34 - ERROR token recognition error at: '\'
!  firestore.rules:29:38 - ERROR token recognition error at: '^'
!  firestore.rules:29:39 - ERROR token recognition error at: '\'

Когда я просто изменил свое правило на "[^\s]", он завершился ошибкой со следующей ошибкой:

firestore.rules:29:29 - ERROR Missing a closing "
!  firestore.rules:29:29 - ERROR mismatched input 's' expecting {'&&', '.', '==', '>', '>=', '[', '<', '<=', '-', '%', '!=', '||', '+', ';', '/', '*', '?', 'in', 'is'}

Мне кажется, что я мог ошибиться в синтаксисе правила для пробелов. Но из документации RE2 я прочитал: https://github.com/google/re2/wiki/Syntax#perl. \s - это класс символов Perl и допускает пробелы, \S не допускает пробелов. Что я сделал здесь не так, и каким должно быть мое правило, чтобы удовлетворить требованиям?

1 Ответ

0 голосов
/ 05 августа 2020

Попробуйте следующее:

^(?!\s)[\w ]{3,16}(?<!\s)$

Это использует отрицательный просмотр вперед / назад, чтобы утверждать, что первый и последний не являются пробелами.

[a-zA-Z0-9_] то же самое, что \w.

Вам не нужно проверять «не все пробелы», потому что, если первый и последний не являются пробелами, весь ввод - это не все пробелы.

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