任意位置的支票信的正则表达式

时间:2016-08-26 13:52:51

标签: regex expression

这几个小时我一直在"战斗"在这种情况下。我正试图检查车牌是否有效(在我的国家,这就像 99-KL-99 )。

该牌照有4条简单的规则:

  • 只能(且必须有)2个字母
  • 只能拥有(并且必须拥有)4个数字
  • 必须有两个" - "
  • 最大范围是9

字母或数字可以是随机的,如" 9F-P2-12"或" 99-JM-99"如果可能的话,我试图在没有OR条件的情况下尽可能简单地获得正则表达式,到目前为止我得到了这两个例子,我只需要一些改进就可以得到我想要的地方

第一名:

 ^^[a-zA-Z][0-9]{1}-[a-zA-Z][0-9]{1}-[a-zA-Z][0-9]{1}$

哪个符合此类" a1-b1-c1"或者" E4-A1-E8",但如果我想检查它是否有字母和数字,无论什么位置怎么办?我如何控制4个数字和2个字母的规则?

第二

 ^(?=.*1)(?=.*2)(?=.*3)

匹配" 123"," 321"等等。无论它们匹配什么位置,这都是我想要的。

我只需要使用它,我一直在尝试许多正则表达式,但仍然没有得到我需要的东西。

编辑:

现在我明白了:

^(\w\w)-(\w\w)-(\w\w)$

效果很好但是可以添加一个" AND"运营商?

之类的东西
  

^(\ w \ w) - (\ w \ w) - (\ w \ w)$ AND 4个数字?和2个字母?

2 个答案:

答案 0 :(得分:1)

您可以使用前瞻:

^(?=(?:.*\d.*){4})(?=(?:.*[A-Z].*){2})[A-Z0-9]{2}(?:-[A-Z0-9]{2}){2}$

其中:

^                               <= ensure start of string
 (?=(?:.*\d.*){4})              <= ensure that there is at least 4 digits
 (?=(?:.*[A-Z].*){2})           <= ensure that there is at least 2 alpha
 [A-Z0-9]{2}(?:-[A-Z0-9]{2}){2} <= specifies the format
$                               <= ensure end of string

请参阅live demo

答案 1 :(得分:-1)

看了你的意见和建议后,我终于以一种简单的方式得到了它

(?=.*(\w\w)-(\w\w)-(\w\w)$)(?=(?:.*\d.*){4})(?=(?:.*[A-Z].*){2})