Fix validating player name

This commit is contained in:
Pig Fang 2019-12-22 14:25:22 +08:00
parent 2d73124fed
commit 35c07cdb63
4 changed files with 71 additions and 4 deletions

View File

@ -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()

View File

@ -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

View File

@ -16,7 +16,7 @@
- 在材质详情页中显示上传者的 badge
- 在错误页面增加指向 FAQ 页面的链接
- 第三方登录(目前仅支持 GitHub 和 Microsoft Live
- 角色名支持字符「§」
- 角色名支持字符「§」需开启「CJK」模式
## 调整

View File

@ -0,0 +1,67 @@
<?php
namespace Tests;
use App\Rules\PlayerName;
class PlayerNameTest extends TestCase
{
public function testOfficialRule()
{
$rule = new PlayerName();
$this->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()
);
}
}