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

本文关键字:模式 正则表达式 压缩 验证 用于 | 更新日期: 2023-09-27 18:28:30

我必须在C#中验证一个"项目代码"字符串——字符串长度可以在5-10个字符之间。除此之外的唯一规则如下:

  1. 第一个字符只能是字母或数字
  2. 中间字符(如果存在)可以是字母、数字或句点(.)
  3. 最后一个字符只能是字母或数字
  4. *避免在中间的一行中使用多个句点

我可以验证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到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]$

您可以使用

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

参见演示

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

new Regex()初始值设定项一起使用时,(?i)内联修饰符可以替换为RegexOptions.IgnoreCase标志。

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

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

谢谢大家!