diff --git a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php index b59b130f09..71532f4e92 100644 --- a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php +++ b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php @@ -73,7 +73,7 @@ class AphrontDefaultApplicationConfiguration 'edit/(?:(?P\d+)/(?:(?P\w+)/)?)?' => 'PhabricatorPeopleEditController', ), - '/p/(?P\w+)/(?:(?P\w+)/)?' + '/p/(?P[\w._-]+)/(?:(?P\w+)/)?' => 'PhabricatorPeopleProfileController', '/conduit/' => array( '' => 'PhabricatorConduitListController', diff --git a/src/applications/people/storage/PhabricatorUser.php b/src/applications/people/storage/PhabricatorUser.php index 93c19b701d..3f54a6efe3 100644 --- a/src/applications/people/storage/PhabricatorUser.php +++ b/src/applications/people/storage/PhabricatorUser.php @@ -595,6 +595,13 @@ EOBODY; } public static function validateUsername($username) { + // NOTE: If you update this, make sure to update: + // + // - Remarkup rule for @mentions. + // - Routing rule for "/p/username/". + // - Unit tests, obviously. + // - describeValidUsername() method, above. + return (bool)preg_match('/^[a-zA-Z0-9._-]*[a-zA-Z0-9_-]$/', $username); }