首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Regex匹配字符串3-6字符长,至少一个字母,没有重复"-“

Regex匹配字符串3-6字符长,至少一个字母,没有重复"-“
EN

Stack Overflow用户
提问于 2021-01-11 10:55:05
回答 3查看 301关注 0票数 0

我必须匹配的字符串是3-6字符长,包含至少一个字母,但可以有字母,数字和只有1 "-“。"-“不能出现在开头或开头。

比赛:

代码语言:javascript
运行
复制
string
str-ng
st-ng
s1-1g
st-1g

不匹配:

代码语言:javascript
运行
复制
strings
-string
string-
st--ng
s-tn-g
1111
st

我得到的最接近的是:

代码语言:javascript
运行
复制
^((?!-.*-)[0-9A-Z]{3,6})$

但是,这将正则表达式匹配与-分开,因此它与s-tri匹配,而不匹配st-ri,因为两端没有3个字符

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-11 11:05:27

也许你可以用:

代码语言:javascript
运行
复制
^(?=.*[a-z])(?!-|.*-$|.*-.*-)[a-z\d-]{3,6}$

请参阅在线演示

  • ^ -启动字符串锚.
  • (?=.*[a-z]) -积极展望,以确保至少有一个字母。
  • (?!-|.*-$|.*-.*-) -负前瞻,以防止连字符在开头在结束的倍数。
  • [a-z\d-]{3,6} --一个角色在课堂上的三到六次。
  • $端字符串锚.

注意,我使用了不区分大小写的标志。

票数 2
EN

Stack Overflow用户

发布于 2021-01-11 10:58:20

您可以使用

代码语言:javascript
运行
复制
^(?=.{3,6}$)(?=[^a-zA-Z]*[A-Za-z])[0-9a-zA-Z]+(?:-[0-9a-zA-Z]+)?$

regex演示。详细信息:

  • ^ -字符串的开始
  • (?=.{3,6}$) - string必须包含除换行字符之外的三到六个字符。
  • (?=[^a-zA-Z]*[A-Za-z]) -字符串中必须至少有一个ASCII字母
  • [0-9a-zA-Z]+ -一个或多个字母数字ASCII字符
  • (?:-[0-9a-zA-Z]+)? -一个可选的-序列,然后是一个或多个字母数字字符
  • $ -字符串的末端。
票数 2
EN

Stack Overflow用户

发布于 2021-01-11 11:15:55

查看您尝试过的模式,当出现两个连字符时,您就意味着排除匹配。

另外,这个部分[0-9A-Z]{3,6}与连字符不匹配。

阅读

"-“不能出现在开头或开头。

你可以用

代码语言:javascript
运行
复制
^(?![^\n-]*-[^\n-]*-)(?=[^a-zA-Z\n]*[a-zA-Z])[a-zA-Z0-9][a-zA-Z0-9-]{2,5}$

Regex演示

如果您的意思是在结尾也没有-

代码语言:javascript
运行
复制
^(?![^\n-]*-[^\n-]*-)(?=[^a-zA-Z\n]*[a-zA-Z])[a-zA-Z0-9][a-zA-Z0-9-]{1,4}[a-zA-Z0-9]$

解释

  • 字符串的^开始
  • (?![^\n-]*-[^\n-]*-)断言不超过2次-
  • (?=[^a-zA-Z\n]*[a-zA-Z])断言一个char
  • [a-zA-Z0-9]匹配没有-的列表之一
  • [a-zA-Z0-9-]{1,4}重复1-4次列出的任何一个包括-
  • [a-zA-Z0-9]匹配没有-的列表之一
  • 字符串的$末端

Regex演示

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

https://stackoverflow.com/questions/65665552

复制
相关文章

相似问题

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