正则表达式(Regex)2个表达式:在验证第二个表达式之前删除空格



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*$))

一无所有。但这需要零宽度的后方查看。参见演示

您正试图用复杂的方式解决一个简单的问题。不使用复杂的正则表达式,只需使用两个简单步骤:

  1. 删除不需要的空格
  2. 应用正则表达式验证字符串并删除其他不需要的字符

相关内容

最新更新