如何编写满足长度、小写字母、中间数字等多约束的正则表达式
符合要求的正则表达式及说明
最终正则
^(?!.*([a-z]).*\1.*\1)(?:[a-z]{2}\d[a-z]{2}|[a-z]{2}\d[a-z]{3}|[a-z]{3}\d[a-z]{2}|[a-z]{3}\d[a-z]{3})$
规则匹配逻辑拆解
- 开头的
^(?!.*([a-z]).*\1.*\1)是负向预查,保证所有小写字母最多出现2次,也就是仅允许0次或1次重复,不会出现同一个字母重复2次及以上的情况 - 后面的分组匹配不同长度下数字的位置要求,天然保证整个字符串只有1个数字,且总长度符合5-7位要求:
[a-z]{2}\d[a-z]{2}:匹配总长度5位的情况,数字固定在索引2的中间位置,前后各2个小写字母[a-z]{2}\d[a-z]{3}|[a-z]{3}\d[a-z]{2}:匹配总长度6位的情况,数字可以在索引2或3的位置[a-z]{3}\d[a-z]{3}:匹配总长度7位的情况,数字固定在索引3的中间位置,前后各3个小写字母
- 首尾的
^和$保证是全字符串匹配,不会出现匹配字符串中部分片段的情况
匹配验证
你给出的合法示例都可以正常匹配:
ab3bw:长度5,数字在索引2,字母b仅重复1次,匹配成功fdg5bde:长度7,数字在索引3,无重复字母,匹配成功qwe3gk:长度6,数字在索引3,无重复字母,匹配成功pu2auz:长度6,数字在索引2,字母u仅重复1次,匹配成功
内容的提问来源于stack exchange,提问作者user13828221
相关产品推荐
相关产品推荐

