用于验证的正则表达式模式 - 试图压缩正则表达式中的重复模式

时间:2015-12-30 23:56:27

标签: c# regex

我必须在C#中验证“项目代码”字符串 - 字符串长度可以是5到10个字符之间的任何位置。除此之外的唯一规则如下:

  1. 第一个字符只能是字母或数字
  2. 中间字符(如果存在)可以是字母,数字或句点(。)
  3. 最后一个字符只能是字母或数字
  4. *中间连续避免多个句号
  5. 我可以像这样验证5-10个字符的限制:

    ^(?=.{5,10}$)
    

    第1部分和第3部分是这样的:

    [a-zA-Z0-9]{1}
    

    中间规则看起来像这样:

    [a-zA-Z0-9.]{0,8}
    

    如果我把它全部放在一起我就有这个:

    ^(?=.{5,10}$)[a-zA-Z0-9]{1}[a-zA-Z0-9.]{0,8}[a-zA-Z0-9]{1}$
    

    它工作正常,但所有几乎完全相同的代码,它似乎可以以某种方式浓缩。有任何想法吗?谢谢!

3 个答案:

答案 0 :(得分:2)

您可以通过将中间部分匹配3到8次来缩短它,并且将外部部分匹配一次(您不需要{1})。这消除了对代码的5,10部分的需要,因为1 + 3 + 1 = 5和1 + 8 + 1 = 10.

^[a-zA-Z0-9][a-zA-Z0-9.]{3,8}[a-zA-Z0-9]$

答案 1 :(得分:1)

我要挽回Cyral的答案,所以+1给他! 我使用不区分大小写的标记从[a-zA-Z0-9][a-z0-9]

^(?i)[a-z0-9][a-z0-9.]{3,8}[a-z0-9]$

谢谢大家!

答案 2 :(得分:1)

您可以使用

(?i)^(?!.*[.]{2})[a-z0-9][a-z0-9.]{3,8}[a-z0-9]$

请参阅demo

  • ^[a-z0-9] - 第一个字符只能是字母或数字
  • [a-z0-9.]{3,8} - 中间字符(如果存在)可以是字母,数字或句点(.
  • [a-z0-9]$ - 最后一个字符只能是字母或数字
  • ^(?!.*[.]{2}) - *避免中间连续多个句号

(?i)初始化程序一起使用时,new Regex()内联修饰符可以替换为RegexOptions.IgnoreCase flag