网站注册功能:如何限制用户名仅含非特殊字符并提示错误
解决方案:添加用户名特殊字符校验
你需要在现有用户名长度校验逻辑后,加入正则校验限制用户名仅包含字母、数字(如需允许下划线可调整正则规则),并在不符合规则时抛出中文错误提示。以下是修改后的完整注册校验代码:
/* 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
相关产品推荐
相关产品推荐

