如何使用preg_match()检测字符串特殊字符(仅允许字母数字的姓氏校验)
PHP用户姓氏合法性校验的正则实现方案
校验规则要求
待检测的姓氏字符串仅可包含字母、数字,不允许出现任何特殊字符(包括@、#、$、^、&、*、(、)等各类常见特殊符号),一旦检测到字符串中存在非法字符,需要弹出错误提示,并跳转至对应成员管理页面。
核心正则编写
检测特殊字符不需要逐一罗列所有特殊字符,通过PCRE正则的取反规则即可覆盖所有非字母、非数字的字符场景,可直接使用的正则表达式为:/[^a-zA-Z0-9]/
- 正则中
[^a-zA-Z0-9]的含义是:匹配所有不在小写字母、大写字母、数字取值范围之内的任意字符 - 正则前后的
/是PHP PCRE正则要求的定界符,编写时不可遗漏,否则会触发正则语法报错
补全后的完整可运行代码
// 匹配非法特殊字符的正则 $specialCharacterRegex = '/[^a-zA-Z0-9]/'; if(preg_match($specialCharacterRegex, $last_name, $match)){ echo ("<script LANGUAGE='JavaScript'> window.alert('Invalid last name. Please check, make sure no special characters are included'); window.location.href='./../MEMBERS/members.php'; </script>"); // 终止后续脚本执行,避免跳转逻辑失效 exit; }
实现注意要点
- 不要将特殊字符逐一罗列到正则匹配规则中,取反规则的校验覆盖范围更全面,不会出现漏判特殊字符的问题
- 输出完JS弹窗、跳转代码后,必须调用
exit终止PHP进程,否则后端会继续执行后续业务逻辑,导致前端页面跳转无法正常生效 - 该正则可完全覆盖题目列举的所有特殊符号场景,不需要额外调整匹配规则;如果页面面向中文用户,可将弹窗的英文提示替换为中文内容,优化交互体验
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

