Я создаю правило regex2 для display_name в Firestore. Что должно делать мое правило:
- Разрешить буквенно-цифровые c, а также заглавные буквы, длина строки должна быть 3-16 символов
- Разрешить пробелы, но не должно быть все пробелы
- Не начинать и не заканчивать пробелом.
Это мое текущее правило. Он удовлетворяет первому требованию, но я придерживаюсь следующих двух требований:
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
не допускает пробелов. Что я сделал здесь не так, и каким должно быть мое правило, чтобы удовлетворить требованиям?