In my opinion, usernames, just like, password should be case-sensitive. Or normalize to all lower case. You then may forget about $regex just to ignore cases. If you normalize to all lower cases, you could add a display name to be as fancy as you want. Often, people will use an email address anyway. I think people would be confused to see many account with similar names:

John_Doe_1
john_Doe_1
john_doe_1
John_dow_1

Normalizing to all lower cases and having a configurable display name would be akin to be able to change their avatar. Our john_doe_1 could change his display name to

John Doe at work
JD in vacations
John THE Doe
John Doe pissed of by Jonh_Dow_1