Regex failing in max length

时间:2016-09-01 06:27:33

标签: c# asp.net regex c#-4.0

I want regex which will allow following format

  1234567-8
  123456B

Now here if user enter second pattern then he should be lock to enter maximum 7 characters so

 1234568B
  123456V1
this becomes invalid

I have tried

[0-9]{7}-[0-9]|[[0-9]{6}[A-z]{1}]{7,7} 

but this fails

3 个答案:

答案 0 :(得分:0)

对于您提供的示例输入,您可以使用this

更简约的版本:^([0-9]{7}-[0-9]|[0-9]{6}[A-Za-z])$

请注意,1234567-8有7位数字和连字符后跟数字,因此整个字符串长度不能仅限于7个字符。

在.NET和几乎所有其他正则表达式中[A-z]都是错误的,因为它可以匹配的不仅仅是字母。

将量词{1}放入字符类会使其成为简单的符号组合,因此[{1}]可以匹配{1}

{7,7}(= {7})不会将整个字符串长度限制为7,因为您没有 anchors ^和{{1围绕表达式而你"毁了"将前面的量词放入一个字符类中。

答案 1 :(得分:0)

我认为这就是你所需要的:

^(\d{7}-\d|\d{6}[A-Z])$

7位数字,短划线,数字或6位数字,1个大型拉丁字母。

答案 2 :(得分:0)

^ \ d {6}(?:\ D- \ d | [A-Z])$

它可以很好地满足2种以上格式

1234567-8

123456B