Как проверить имена пользователей с помощью matches (regex)?
Я пытаюсь поместить следующее выражение в функцию matches, но я предполагаю ошибки при попытке компиляции правил.
^[a-zA-Z](([._-][a-zA-Z0-9])|[a-zA-Z0-9])*[a-z0-9]$
.validate правило выглядит следующим образом:
".validate": "newData.val() === auth.uid
&& newData.val().matches(^(?=.{5,10}$)(?!.*[._-]{2})[a-z][a-z0-9._-]*[a-z0-9]$)"
Я получаю:
" Invalid escape: '.'"
1 ответ:
Похоже, что вы не можете использовать lookarounds в Firebase, поэтому ваш шаблон и весь подход должны быть скорректированы с учетом этого.
Ваше текущее регулярное выражение требует длины строки от 5 до 10 символов и запрещает 2 последовательных символа
.,_и-. Первое условие должно быть проверено вне регулярного выражения с помощью некоторого кода, напримерnewData.val().length >= 5 && newData.val().length <= 10, а второе просто требует перегруппировки и повторной количественной оценки:.matches(/^[a-z][a-z0-9]*([._-][a-z0-9]+)*$/)См. регулярное выражение демо .
Подробности :
^- начало строки[a-z]- строчная буква (если вы добавите/iв конце, она будет чувствительна к регистру)[a-z0-9]*- ноль или болееa-zи0-9символов([._-][a-z0-9]+)*- а.,_или-, за которым следует один или несколько (это требует, чтобы[a-z0-9]был в конце, если есть.,_или-в строке) символы из0-9иa-zдиапазонов$- конец струнный якорь.Примечание вам не нужно экранировать символы внутри класса символов, так как
.и_не являются специальными символами внутри него, а-в конце или начале скобочного выражения (класса символов) является литеральным дефисом.