TLDR:
我可以选择只添加一个正则表达式。
如何制作这两个表达式:
- \s
- (\d{10}((19|20((\d{2}($:$1$3
同时(一个接一个(工作,而不是分开工作?
这还不够:\s|(\d{10}((19|20((\d{2}($:$1$3
详细描述:
我有一个表达式:"(\d{10}((19|20((\d{2}($:$1$3">
它的作用:
- 用户密码应为12位数字,以年份的最后2位数字结尾
- 如果短语有14位数字(某人加了一整年(,忽略第11位和第12位数字
由于这一点,我们可以接受这两个代码:308814310175和30881431011975。
现在我正在寻找一种方法来忽略空格,以防用户错误地将它们添加到任何地方(这不是我的要求(。
理论上,我可以加上"|\s",得到"\s|(\d{10}((19|20((\d{2}($:$1$3"。
两个正则表达式分别工作:
- 当有人添加全年时,它会删除第11位和第12位
- 当有人添加空间时,它会将其删除但如果有人添加空格并添加全年,那么只有删除空格才有效(因为短语长于14位(
所以这是有效的:
- 308814310175
- 30881431011975
- 3088143 10119
但这不起作用:
- 3088143101 1975
因为它删除了空格或第11/12位数字,而不是让这两件事一个接一个地工作。
如何使两个表达式同时工作?
提前感谢您的帮助。
一个有点长的解决方案是单独捕获任何数字,并避免空格和可能的第11位和第12位(如果总共14位(:
^s*(d)s*(d)s*(d)s*(d)s*(d)s*(d)s*(d)s*(d)s*(d)s*(d)s*(?:1s*9|2s*0)?s*(d)s*(d)s*$
查看在线演示。然后用$1$2$3$4$5$5$6$7$8$9$10$11$12
替换
另一种可能性(如果支持(可以替换:
(?:[^Sn]|(?<=^s*(?:ds*?){10})s*(?:1s*9|2s*0)(?=s*ds*ds*$))
一无所有。但这需要零宽度的后方查看。参见演示
您正试图用复杂的方式解决一个简单的问题。不使用复杂的正则表达式,只需使用两个简单步骤:
- 删除不需要的空格
- 应用正则表达式验证字符串并删除其他不需要的字符