From 35c07cdb63bb182ec06e2535ba46d1be0cedc53c Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Sun, 22 Dec 2019 14:25:22 +0800 Subject: [PATCH] Fix validating player name --- app/Rules/PlayerName.php | 4 +- resources/misc/changelogs/en/5.0.0.md | 2 +- resources/misc/changelogs/zh_CN/5.0.0.md | 2 +- tests/RulesTest/PlayerNameTest.php | 67 ++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 tests/RulesTest/PlayerNameTest.php diff --git a/app/Rules/PlayerName.php b/app/Rules/PlayerName.php index 03743e11..4c235b6f 100644 --- a/app/Rules/PlayerName.php +++ b/app/Rules/PlayerName.php @@ -13,7 +13,7 @@ class PlayerName implements Rule switch (option('player_name_rule')) { case 'official': // Mojang's official username rule - $regexp = '/^[A-Za-z0-9_§]+$/'; + $regexp = '/^[A-Za-z0-9_]+$/'; break; case 'cjk': @@ -26,7 +26,7 @@ class PlayerName implements Rule break; } - return preg_match($regexp, $value); + return (bool) preg_match($regexp, $value); } public function message() diff --git a/resources/misc/changelogs/en/5.0.0.md b/resources/misc/changelogs/en/5.0.0.md index 6364f749..3b55c695 100644 --- a/resources/misc/changelogs/en/5.0.0.md +++ b/resources/misc/changelogs/en/5.0.0.md @@ -16,7 +16,7 @@ - Added badges at texture detail page. - Added FAQ link at error page. - Added login with 3rd-party services. (GitHub and Microsoft Live are supported currently.) -- Added support of character "§" for player name. +- Added support of character "§" for player name. (Under CJK mode.) ## Tweaked diff --git a/resources/misc/changelogs/zh_CN/5.0.0.md b/resources/misc/changelogs/zh_CN/5.0.0.md index b2ad565f..55c460d1 100644 --- a/resources/misc/changelogs/zh_CN/5.0.0.md +++ b/resources/misc/changelogs/zh_CN/5.0.0.md @@ -16,7 +16,7 @@ - 在材质详情页中显示上传者的 badge - 在错误页面增加指向 FAQ 页面的链接 - 第三方登录(目前仅支持 GitHub 和 Microsoft Live) -- 角色名支持字符「§」 +- 角色名支持字符「§」(需开启「CJK」模式) ## 调整 diff --git a/tests/RulesTest/PlayerNameTest.php b/tests/RulesTest/PlayerNameTest.php new file mode 100644 index 00000000..5ec04639 --- /dev/null +++ b/tests/RulesTest/PlayerNameTest.php @@ -0,0 +1,67 @@ +assertTrue($rule->passes('', '_name_')); + $this->assertTrue($rule->passes('', 'NaN')); + + $this->assertFalse($rule->passes('', '中文')); + $this->assertFalse($rule->passes('', '§Me')); + $this->assertFalse($rule->passes('', ';')); + $this->assertFalse($rule->passes('', '\\')); + + $this->assertEquals( + trans('user.player.player-name-rule.official'), + $rule->message() + ); + } + + public function testCJK() + { + option(['player_name_rule' => 'cjk']); + $rule = new PlayerName(); + + $this->assertTrue($rule->passes('', '_name_')); + $this->assertTrue($rule->passes('', 'NaN')); + $this->assertTrue($rule->passes('', '中文')); + $this->assertTrue($rule->passes('', '§Me')); + + $this->assertFalse($rule->passes('', ';')); + $this->assertFalse($rule->passes('', '\\')); + + $this->assertEquals( + trans('user.player.player-name-rule.cjk'), + $rule->message() + ); + } + + public function testCustom() + { + option(['player_name_rule' => 'custom']); + $rule = new PlayerName(); + + $this->assertTrue($rule->passes('', '_name_')); + $this->assertTrue($rule->passes('', 'NaN')); + $this->assertTrue($rule->passes('', '中文')); + $this->assertTrue($rule->passes('', '§Me')); + $this->assertTrue($rule->passes('', ';')); + $this->assertTrue($rule->passes('', '\\')); + + option(['custom_player_name_regexp' => '/[ab]/']); + $this->assertTrue($rule->passes('', 'a')); + $this->assertFalse($rule->passes('', 'c')); + + $this->assertEquals( + trans('user.player.player-name-rule.custom'), + $rule->message() + ); + } +}