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

如何基于指定约束编写仅支持核心语法的密码校验正则表达式

基础字符集定义

首先统一约定后续用到的字符集合:

  • 小写字母集 L = {a,b,c,...,z}
  • 大写字母集 U = {A,B,C,...,Z}
  • 数字集 N = {0,1,2,...,9}
  • 合法特殊字符集 S = {@,$,#,%,&}
  • 合法首字符集 A = L ∪ U ∪ N,对应正则写法为 (L|U|N)

原有写法问题说明

你当前写的正则存在三个明显问题:

  1. 强制了字符类型的出现顺序,没有覆盖小写、大写、数字、特殊字符的任意排列场景,会漏过大量合法密码
  2. 完全没有实现「禁止3位及以上相同连续数字」的约束
  3. 没有限制整体只能出现指定范围内的字符

符合要求的正则实现

由于仅能使用核心正则(不支持断言),需要通过排列组合覆盖所有必要字符的出现顺序,同时限制数字的连续出现次数:

  1. 首先定义合法字符单元,保证不会出现3位连续相同数字:
// 非数字字符无连续限制,每个数字最多连续出现2次
E = (L|U|S) | (0|00)|(1|11)|(2|22)|(3|33)|(4|44)|(5|55)|(6|66)|(7|77)|(8|88)|(9|99)
  1. 按首字符类型分三类场景,覆盖所有必要字符的排列组合,最终正则如下:
# 场景1:首字符为小写字母,后续需包含大写、数字、特殊字符各至少1个
L E* (
    E* U E* N E* S E* |
    E* U E* S E* N E* |
    E* N E* U E* S E* |
    E* N E* S E* U E* |
    E* S E* U E* N E* |
    E* S E* N E* U E*
)
|
# 场景2:首字符为大写字母,后续需包含小写、数字、特殊字符各至少1个
U E* (
    E* L E* N E* S E* |
    E* L E* S E* N E* |
    E* N E* L E* S E* |
    E* N E* S E* L E* |
    E* S E* L E* N E* |
    E* S E* N E* L E*
)
|
# 场景3:首字符为数字,后续需包含小写、大写、特殊字符各至少1个
N E* (
    E* L E* U E* S E* |
    E* L E* S E* U E* |
    E* U E* L E* S E* |
    E* U E* S E* L E* |
    E* S E* L E* U E* |
    E* S E* U E* L E*
)

如果需要完全符合核心正则语法,只需把所有缩写的集合(L/U/S等)替换为对应字符用|连接的形式即可。


内容的提问来源于stack exchange,提问作者Huda Iftikar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:06:05