diff --git a/modules/security/src/main/DataForm.scala b/modules/security/src/main/DataForm.scala index 11c5525196..c2c9673b48 100644 --- a/modules/security/src/main/DataForm.scala +++ b/modules/security/src/main/DataForm.scala @@ -35,7 +35,7 @@ final class DataForm( Constraints minLength 2, Constraints maxLength 20, Constraints.pattern( - regex = User.usernameRegex, + regex = User.newUsernameRegex, error = "usernameInvalid" ) ).verifying("usernameUnacceptable", u => !LameName.username(u)) diff --git a/modules/user/src/main/User.scala b/modules/user/src/main/User.scala index b8a7da0600..f97e59d985 100644 --- a/modules/user/src/main/User.scala +++ b/modules/user/src/main/User.scala @@ -140,8 +140,12 @@ object User { // No: contact@lichess.org, @1, http://example.com/@happy0 val atUsernameRegex = """(?<=\s|^)@(?>([a-zA-Z_-][\w-]{1,19}))(?![\w-])""".r - val usernameRegex = """(?i)[a-z][\w-]*[a-z0-9]""".r - def couldBeUsername(str: String) = usernameRegex.pattern.matcher(str).matches + // what existing usernames are like + val historicalUsernameRegex = """(?i)[\w-]*[a-z0-9]""".r + // what new usernames should be like + val newUsernameRegex = """(?i)[a-z][\w-]*[a-z0-9]""".r + + def couldBeUsername(str: String) = historicalUsernameRegex.pattern.matcher(str).matches def normalize(username: String) = username.toLowerCase