注册时候的用户名不能用中文怎么办
注册用户名不能用中文怎么办
bosco Lv1新人
可以修改源代码,一共三个文件,修改前务必备份,最好在本地搭建测试站点先测试:
1、# core/auth.php
修改前:
function username_valid(string $name): bool
{
[$min, $max] = username_rule();
return (bool)preg_match('/^[A-Za-z0-9][A-Za-z0-9_.-]{' . ($min - 1) . ',' . ($max - 1) . '}$/', $name);
}修改后:
function username_valid(string $name): bool
{
[$min, $max] = username_rule();
return (bool)preg_match('/^[\p{Han}A-Za-z0-9][\p{Han}A-Za-z0-9_.-]{' . ($min - 1) . ',' . ($max - 1) . '}$/u', $name);
}2、# core/auth.php
此段代码为注册页面文字说明,改完需同步修改lang/zh-cn.php语言包文件内t()字段
改前:
function username_rule_text(): string
{
[$min, $max] = username_rule();
return t('Username must be %1$d-%2$d characters: letters, numbers, dot, dash or underscore.', $min, $max);
}改后:
function username_rule_text(): string
{
[$min, $max] = username_rule();
return t('Username must be %1$d-%2$d characters: Chinese characters, letters, numbers, dot, dash or underscore.', $min, $max);
}3、# view/register.php
改前:
<input type="text" name="username" value="<?= h($values['username']) ?>" required autofocus minlength="<?= h((string)$umin) ?>" maxlength="<?= h((string)$umax) ?>" autocomplete="username" pattern="[A-Za-z0-9][A-Za-z0-9_.\-]{<?= h((string)($umin - 1)) ?>,<?= h((string)($umax - 1)) ?>}">改后:
<input type="text" name="username" value="<?= h($values['username']) ?>" required autofocus minlength="<?= h((string)$umin) ?>" maxlength="<?= h((string)$umax) ?>" autocomplete="username">4、# view/settings.php
改前:
<?= form_row(t('Username'), input('username', (string)$user['username'], ['maxlength' => 30, 'pattern' => '[A-Za-z0-9][A-Za-z0-9_.-]{1,29}']), user_rename_next($user) > now() ? t('You can change your username again on %s.', date('Y-m-d', user_rename_next($user))) : t('Letters, numbers, dot, dash or underscore. Links to your old profile name keep working.')) ?>改后:
<?= form_row(t('Username'), input('username', (string)$user['username'], ['maxlength' => 30]), user_rename_next($user) > now() ? t('You can change your username again on %s.', date('Y-m-d', user_rename_next($user))) : t('Chinese characters, letters, numbers, dot, dash or underscore. Links to your old profile name keep working.')) ?>5、# 确认数据库 username / username_lower 字符集为utf8mb4编码。
wfdaj Lv1新人
建议开启论坛昵称功能,不然用户名链接不好处理。
是的,后台开启昵称后,用户在个人资料页就可以修改昵称了。
