You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站注册功能:如何限制用户名仅含非特殊字符并提示错误

解决方案:添加用户名特殊字符校验

你需要在现有用户名长度校验逻辑后,加入正则校验限制用户名仅包含字母、数字(如需允许下划线可调整正则规则),并在不符合规则时抛出中文错误提示。以下是修改后的完整注册校验代码:

/* register user */
if ((int) $_REQUEST['submitme'])
{
    // validation
    $title               = "user";
    $firstname           = trim($_REQUEST['firstname']);
    $lastname            = trim($_REQUEST['lastname']);
    $emailAddress        = trim(strtolower($_REQUEST['emailAddress']));
    $emailAddressConfirm = trim(strtolower($_REQUEST['emailAddressConfirm']));
    $username            = trim(strtolower($_REQUEST['username']));
    $username            = preg_replace('/\s+/', '', $username);
    
    if (!strlen($title))
    {
         setError(t("please_enter_your_title", "Please enter your title"));
    }
    elseif (!strlen($firstname))
    {
        setError(t("please_enter_your_firstname", "Please enter your firstname"));
    }
    elseif (!strlen($lastname))
    {
        setError(t("please_enter_your_lastname", "Please enter your lastname"));
    }
    elseif (!strlen($emailAddress))
    {
        setError(t("please_enter_your_email_address", "Please enter your email address"));
    }
    elseif ($emailAddress != $emailAddressConfirm)
    {
        setError(t("your_email_address_confirmation_does_not_match", "Your email address confirmation does not match"));
    }
    elseif (!valid_email($emailAddress))
    {
        setError(t("your_email_address_is_invalid", "Your email address is invalid"));
    }
    elseif (!strlen($username))
    {
        setError(t("please_enter_your_preferred_username", "Please enter your preferred username"));
    }
    elseif ((strlen($username) < 6) || (strlen($username) > 20))
    {
        setError(t("username_must_be_between_6_and_20_characters", "Your username must be between 6 and 20 characters"));
    }
    // 新增:用户名特殊字符校验
    elseif (!preg_match('/^[a-zA-Z0-9]+$/', $username))
    {
        setError("用户名不能包含特殊字符");
    }
    else
    {
        $checkEmail = UserPeer::loadUserByEmailAddress($emailAddress);
        if ($checkEmail)
        {
            // username exists
            setError(t("email_address_already_exists", "Email address already exists"));
        }
        else
        {
            $checkUser = UserPeer::loadUserByUsername($username);
            if ($checkUser)
            {
                // username exists
                setError(t("username_already_exists", "Username already exists"));
            }
        }
    }

关键修改说明:

  • 新增elseif (!preg_match('/^[a-zA-Z0-9]+$/', $username))判断,用正则表达式校验用户名格式:
    • ^ 和 $ 确保匹配整个用户名,避免部分字符符合规则就通过的情况
    • [a-zA-Z0-9] 限定允许的字符范围,若需允许下划线,可修改为[a-zA-Z0-9_]
  • 不符合规则时调用setError输出中文错误提示“用户名不能包含特殊字符”

内容的提问来源于stack exchange,提问作者Klagor Mundavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:37:42