我必须在C#中验证“项目代码”字符串 - 字符串长度可以是5到10个字符之间的任何位置。除此之外的唯一规则如下:
我可以像这样验证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}$
它工作正常,但所有几乎完全相同的代码,它似乎可以以某种方式浓缩。有任何想法吗?谢谢!
答案 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。