我已经被这个问题困扰了好几天了。我需要一个正则表达式来验证这个格式的ID:
^[0-9]{2}[-]{0,1}[0-9]{7}$
但从这个模式中,我必须排除这样的集合:
- 00-0000000和00000000
- 11-1111111和111111111
- 22日至2222222日和22222222日
- ...
- 99-9999999和99999999
请注意,22-2222221
是有效的。
有人能帮助我吗?如果ID中没有破折号,我可以使用^(\d)(?!\1{8})\d{8}$,但如果有连字符怎么办?
尝试过类似
^(\d)(?!\1{8})\d{8}$|^(\d)(?!\1{2})\d{1}-(?!\1{7})\d{7}$
但是第二部分似乎不能正常工作。
感谢Wiktor提供的解决方案。你会如何调整它以适应下面的模式呢?
^[0-9]{3}[-]{0,1}[0-9]{2}[-]{0,1}[0-9]{4}$
也许这样的方法可以奏效:^(?!(\d)(?:-?\1)*$)\d{3}-?\d{2}-?\d{4}$
1条答案
按热度按时间8cdiaqws1#
您可以使用
请参见regex demo。
^
-字符串开始(?!(\d)(?:-?\1)*$)
-如果存在以下情况,则匹配失败的负前瞻(\d)
-一位数字(在第1组中采集)(?:-?\1)*
-可选-
的零个或多个序列,然后是组2中捕获的数字$
-字符串结尾,紧靠当前位置的右侧\d{2}-?\d{7}
-两位数,可选的-
,然后是七位数$
-字符串结束。