首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建Regex以筛选出长度、大小写和字符类等很少复杂条件下的结果

如何创建Regex以筛选出长度、大小写和字符类等很少复杂条件下的结果
EN

Stack Overflow用户
提问于 2019-10-23 13:45:40
回答 2查看 42关注 0票数 0

我已经过滤了以下内容:

  • 2位(?=..*\d)
  • 2个大写字符(?=..*[a-z])
  • 2个小写字符(?=..*[A-Z])
  • 10至63个字符.{10,63}$

这意味着:

代码语言:javascript
复制
(?=.{2,}\d)(?=..*[a-z])(?=..*[A-Z]).{10,63}

然后,我想排除一个以字母u开头,以3到6位数字结尾的单词:

代码语言:javascript
复制
([uU][0-9]{3,6})

但是,如何将这两种模式合并以执行以下操作:

它不应该允许以下操作,因为它分别是:

代码语言:javascript
复制
# does not have the required combination of characters
aaaaaaaaaaaaaaa

# is too long
asadsfdfs12BDFsdfsdfdsfsdfsdfdsfdsfdfsdfsdfsdfsdsfdfsdfsdfssdfdfsdfssdfdfsdfssdfdfsdfsdfsdfsdfsfdsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfsdfs

# contains the pattern that shouldn't be allowed
U0000ABcd567890
ABcd56U00007890
D4gF3U432234
D4gF3u432234
ABcd567890U123456

应该允许以下内容:

代码语言:javascript
复制
# it has the required combination of characters
ABcd5678990
ABcd567890

# does contain a part of the disallowed pattern (`([uU][0-9]{3,6})`), but does not fit that pattern entirely
ABcd567890U12
ABcd5U12abcdf
s3dU00sDdfgdg
ABcd56U007890

在这里创建和示例:https://regex101.com/r/4b2Hu9/3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-23 14:20:18

在您的模式中,您使用了一个前瞻性(?=..*\d),它的含义与您所设想的不同。

这意味着,如果右边直接的字符是2倍或2倍以上,那么除了换行符后面跟着一个单数,大写和小写变体也是一样的。

您可以将模式更新为:

代码语言:javascript
复制
^(?!.*[uU]\d{3,6})(?=(?:\D*\d){2})(?=(?:[^a-z]*[a-z]){2})(?=(?:[^A-Z]*[A-Z]){2}).{10,63}$

各部分

  • 字符串的^开始
  • (?!.*[uU]\d{3,6})负前瞻,不要断言uU,后面跟着3-6位数字。
  • (?=(?:\D*\d){2})断言2位数
  • (?=(?:[^a-z]*[a-z]){2})断言2个小写字符
  • (?=(?:[^A-Z]*[A-Z]){2})断言2个大写字符
  • .{10,63}匹配除换行符10-63次以外的任何字符。
  • 字符串的$末端

Regex演示

票数 2
EN

Stack Overflow用户

发布于 2019-10-23 14:21:04

首先,确保字符串包含两个数字的方法是使用正的前瞻性:

代码语言:javascript
复制
(?=.*\d.*\d)

您可以将其推广到其他过滤器。

要确保字符串包含10-63个字符,请执行以下操作:

代码语言:javascript
复制
.{10,63}

您说您不希望字符串以u或U开头,后面跟着3到6位数字(假定7位数字可以),请使用负的前瞻性:

代码语言:javascript
复制
(?![uU]\d{3,6}\D)

\D必须确保如果有7位数字,则字符串将被接受。

把这一切结合在一起:

代码语言:javascript
复制
r'^(?=.*\d.*\d)(?=.*[a-z].*[a-z])(?=.*[A-Z].*[A-Z])(?![uU]\d{3,6}\D).{10,63}$'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58524330

复制
相关文章

相似问题

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