如何修改正则表达式以排除-0与-00后缀的匹配项?
解决正则表达式排除-0和-00的问题
你当前的正则^[0-9]{6}(-(?!00)[0-9]{1,2})$只排除了-00,但没限制单个0的情况,有两种修改方式可以实现需求:
方式一:扩展负向预查规则
把原来的预查条件从(?!00)改成(?!00|0$),这样就能同时排除-00和-0的情况,修改后的正则为:
^[0-9]{6}(-(?!00|0$)[0-9]{1,2})$
- 解释:
(?!00|0$)是负向预查,意思是后面不能是00,也不能是单个0就结束整个字符串,完美覆盖你要排除的两种情况。
方式二:直接匹配合法后缀
换个思路,不做排除,直接定义合法的后缀格式:要么是两位数字且第一位非0,要么是一位非0数字,正则可以写成:
^[0-9]{6}(-(?:[1-9][0-9]|[1-9]))$
- 解释:
(?:[1-9][0-9]|[1-9])是非捕获分组,[1-9][0-9]匹配10-99的两位数,[1-9]匹配1-9的一位数,这样自然就排除了-0和-00。
两种方式都能满足你的需求,第二种更直观,可读性更强,推荐优先使用。
内容的提问来源于stack exchange,提问作者Selthien
相关产品推荐
相关产品推荐

