如何用正则表达式验证字符串包含至少3种不同数字?
正则表达式匹配包含至少3种不同数位的数字串
需求说明
检查字符串中的数字部分是否包含至少3种不同的数位:
- 符合要求:
AB1000002(数字部分包含1、0、2三种不同数位) - 不符合要求:
AB1000000(数字部分仅包含1、0两种数位)
解决方案正则
^.*(?:(\d).*?(?!\1)(\d).*?(?!\1|\2)(\d)).*$
正则解释
^.*匹配字符串开头到目标数字前的任意字符(?:(\d).*?(?!\1)(\d).*?(?!\1|\2)(\d))核心匹配逻辑(非捕获组):(\d)捕获第一个数字到分组1.*?(?!\1)匹配任意字符,直到遇到与分组1不同的数字(\d)捕获第二个不同的数字到分组2.*?(?!\1|\2)匹配任意字符,直到遇到既不属于分组1也不属于分组2的数字(\d)捕获第三个不同的数字到分组3
.*$匹配第三个数字之后的任意字符到字符串结尾
关于你之前的正则
你写的 \d(\d)((?!\1)\d)+ 存在局限性:它只能检查从第二个数字开始是否有不同,但无法确保存在第三种不同数位,比如1122会被这个正则匹配,但实际只有两种数位,不符合需求。
内容的提问来源于stack exchange,提问作者Lylaaaa
相关产品推荐
相关产品推荐

