首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex以不同的条件开始和结束,但允许一个字符。

Regex以不同的条件开始和结束,但允许一个字符。
EN

Stack Overflow用户
提问于 2015-05-28 15:55:30
回答 3查看 104关注 0票数 3

所以我被困在正确的判决上了.以下是规则:

  • 它必须从一封信开始。
  • 它只能包含字母、数字、连字符和下划线。
  • 它必须以字母或数字结尾。

我走了这么远:

代码语言:javascript
复制
/\A^[A-Z]+[A-Z0-9\-_]*[A-Z0-9]$\z/i

这似乎有效,但不允许有一封信。这样a就会返回false。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-28 15:58:12

您可以使用这种基于前瞻性的正则表达式来代替,允许单字符输入

代码语言:javascript
复制
/^(?=.*?[A-Z0-9]$)[A-Z][\w-]*$/mgi

RegEx演示

(?=.*?[A-Z0-9]$)将强制执行字符串必须以字母或数字结尾的规则。

票数 2
EN

Stack Overflow用户

发布于 2015-05-28 16:05:41

由于[A-Z]+[A-Z0-9]$,您的regex期望至少有两个字母。

使用以下方法:

代码语言:javascript
复制
\A^[A-Z](?:[A-Z0-9\-_]*[A-Z0-9])?$\z
        ^^^                     ^

请参阅演示

解释:

  • +不是必需的,因为它是由[A-Z0-9\-_]*覆盖的。
  • 将剩余的模式作为可选模式(带有?)包含在一个字符上,但对于多个字符则是强制性的。
票数 2
EN

Stack Overflow用户

发布于 2015-05-28 16:06:04

我会选择这样的一种选择:

代码语言:javascript
复制
^([A-Za-z]|[A-Za-z][\w-]*[A-Za-z0-9])$

The 演示在这里

第一个元原语是一个字母,第二个是字母,后面是字母或数字或连字符0到无限次,以字母或数字结尾。括号形成一个捕获组,并强制执行行开始和行尾之间的替代(^$)。

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

https://stackoverflow.com/questions/30511538

复制
相关文章

相似问题

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