首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于验证的Regex模式-试图在regex中压缩重复模式

用于验证的Regex模式-试图在regex中压缩重复模式
EN

Stack Overflow用户
提问于 2015-12-30 23:56:26
回答 3查看 50关注 0票数 3

我必须在C#中验证一个“项目代码”字符串--字符串长度可以在5-10个字符之间。这方面的唯一规则如下:

  1. 第一个字符只能是一个字母或数字。
  2. 中间字符如果存在,可以是字母、数字或句点(.)
  3. 最后一个字符只能是一个字母或数字。
  4. *避免中间连续超过一段时间。

我可以像这样验证5-10个字符的限制:

代码语言:javascript
复制
^(?=.{5,10}$)

第一部分和第三部分是这样的:

代码语言:javascript
复制
[a-zA-Z0-9]{1}

中间规则是这样的:

代码语言:javascript
复制
[a-zA-Z0-9.]{0,8}

如果我把这些都放在一起,我就有了这个:

代码语言:javascript
复制
^(?=.{5,10}$)[a-zA-Z0-9]{1}[a-zA-Z0-9.]{0,8}[a-zA-Z0-9]{1}$

它工作得很好,但是在所有这些几乎相同的代码中,它似乎可以被浓缩。有什么想法吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-31 01:09:44

您可以使用

代码语言:javascript
复制
(?i)^(?!.*[.]{2})[a-z0-9][a-z0-9.]{3,8}[a-z0-9]$

请参阅演示

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

当与(?i)初始化器一起使用时,可以用标志替换new Regex()内联修饰符。

票数 1
EN

Stack Overflow用户

发布于 2015-12-31 00:03:07

通过将中间部分3到8次匹配,并与外部部分匹配一次(不需要{1}),可以使其更短一些。这消除了对代码的5,10部分的需求,因为1+3+1=5和1+8+1=10。

代码语言:javascript
复制
^[a-zA-Z0-9][a-zA-Z0-9.]{3,8}[a-zA-Z0-9]$
票数 2
EN

Stack Overflow用户

发布于 2015-12-31 00:11:30

我要回过头去--别回答西拉尔的问题,所以我要给他加1!我使用一个不区分大小写的标志从[a-zA-Z0-9][a-z0-9]

代码语言:javascript
复制
^(?i)[a-z0-9][a-z0-9.]{3,8}[a-z0-9]$

谢谢各位!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34539091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档