Shourya Shikhar
Shourya Shikhar

Reputation: 1524

Firebase Realtime Database security rules regular expression: Normal Javastring regex doesn't get accepted in .matches()

I have this regex: /^(?=[^A-Za-z]*([A-Za-z][^A-Za-z]*){6}$)\w+$/

But it doesn't get accepted in .validate's matches(). Shows invalid character and other such errors.

"$username": {
        // here
        ".validate": "$username.matches(/^(?=[^A-Za-z]*([A-Za-z][^A-Za-z]*){6}$)\w+$/)",
        ".write": "(auth.uid != null && newData.val() === auth.uid) || (auth != null && !newData.exists())"
}

What all changes do I need to make to expression to make it accept in rules?

Upvotes: 1

Views: 60

Answers (1)

The fourth bird
The fourth bird

Reputation: 163632

Looking at this page Firebase Security Rules Regular Expressions lookarounds and non capture groups do not seem to be supported.

You might write the pattern without any lookarounds, repeat a capture group 6 times and only use \w as that is only allowed to match:

^\w*([A-Za-z]\w*){6}$

The pattern matches:

  • ^ Start of string
  • \w* Match optional leading word chars
  • ([A-Za-z]\w*){6} Match 6 times a char A-Z a-z followed by optional trailing word chars
  • $ End of string

See a regex demo.

The final working command according to the comments:

".validate": "$username.matches(/^\\w*([A-Za-z]\\w*){6,}$/)",

Upvotes: 2

Related Questions