Как разработать регулярное выражение в Firebase? - PullRequest
0 голосов
/ 11 июня 2019

Я не могу понять, почему мое регулярное выражение совпадает с тем, чего не должно быть при использовании в Firebase для проверки имен пользователей.

Я пробовал читать другие сообщения, такие как Как проверять имена пользователей с помощью совпадений(regex)? но я все еще не могу понять, что я делаю неправильно.

Используемое мной регулярное выражение:

/^\\S+(\\s\\S+)*$/

Что является частьюПравила, которые я здесь определил:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null",
        ".write": "$uid === auth.uid",
        ".validate": "newData.hasChildren(['username'])",
        "username": {
          ".validate": "newData.isString() && newData.val().length > 0 && newData.val().length < 21 && newData.val().matches(/^\\S+(\\s\\S+)*$/)"
        }
      }
    }
  }
}

Я хочу иметь возможность сопоставлять строки, которые не начинаются и не заканчиваются пробелом и не имеют последовательных пробелов.

За исключением кавычек, я ожидаю, что что-то вроде "this is a username" будет совпадать, а " hello world" не получится, но они оба пройдут, когда я протестирую их с помощью симулятора на Firebase.

Выход симулятора Firebase:

enter image description here

1 Ответ

1 голос
/ 11 июня 2019

Я никогда не использовал \S раньше, поэтому пришлось посмотреть, что он делает.Но это действительно, кажется, вызывает проблемы здесь.Я не уверен, почему, но, похоже, в моем быстром тестировании учитываются пробелы, хотя достаточно интересно, что вкладки не совпадают с \S.

Возможно, вы захотите попробовать с \w, который работал длямне и очень похоже.Или вы можете инвертировать \\s самостоятельно с помощью newData.val().matches(/^[^\\s].*$/), что эквивалентно тому, что вы пытаетесь.

В последнем я заменил (\\s\\S+)* на гораздо более простой .*, что должно бытьэквивалент.

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