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?
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 stringSee a regex demo.
The final working command according to the comments:
".validate": "$username.matches(/^\\w*([A-Za-z]\\w*){6,}$/)",