I'm trying to validate a username string with the following characteristics:
. or _
.
. in a rowletter characters and numbers
my code is username.matches('^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0-9_.]+$')
Using a regex simulator online it's working
https://regex101.com/r/bDXMg3/2/
But using the same syntax in Google RE2 Syntax (used in Firestore Security Rules) is throwing a ton of errors

I tried to then double escape each .
using the code username.matches('^(?!\\.)(?!_)(?!.*\\.$)(?!.*?\\.\\.)[a-z0-9_.]+$')
It only shows one error (red ^ sign at the beginning), but then it gives me the error below

Invalid regular expression pattern. Pattern: ^(?!\.)(?!_)(?!.*\.$)(?!.*?\.\.)[a-z0-9_.]+$.
RE2 does not support lookaheads (nor lookbehinds).
However, the pattern can be re-written without lookarounds:
^[a-z0-9][a-z0-9_]*([.][a-z0-9_]+)*$
Details
^ - start of string[a-z0-9] - a letter or digit[a-z0-9_]* - zero or more lowercase letters, digits, or underscores([.][a-z0-9_]+)* - zero or more sequences of
[.] - a dot[a-z0-9_]+ - one or more lowercase letters, digits, or underscores$ - end of string.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With