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