I have this regex:
/^[A-z0-9\._-]{3,24}+$/i
This is supposed to only match a string between 3 and 24 characters long, and only with the characters a-z, A-Z, 0-9, and then also the . _ and - characters.
The problem is this is also matching strings like "^_^". Someone just created a username with exactly that, so this is definitely a problem! Can anyone spot the problem with my regex?
Use this regex:
/^[\w.-]{3,24}$/
A-z
is not same as [A-Za-z]
as it also includes other characters such as ^
(thanks Jack)
Also remove extra quantifier +
after {3,24}
which means one or more instances of whole string.
PS: I have also shortened your regex to use \w
instead of [A-Za-z0-9_]
You do not need the +
as you are specifying a range of lengths with the {3,24}
/^[A-z0-9\._-]{3,24}$/i
As was pointed out in the comments below, A-z
matches the ^ character, as well. In this case A-Za-z
would be better; however, the answer above with \w.-
is the most elegant by far.