Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建正则表达式以过滤出与长度、大小写和字符类相关的很少复杂条件的结果_Javascript_Regex - Fatal编程技术网

Javascript 如何创建正则表达式以过滤出与长度、大小写和字符类相关的很少复杂条件的结果

Javascript 如何创建正则表达式以过滤出与长度、大小写和字符类相关的很少复杂条件的结果,javascript,regex,Javascript,Regex,我有以下几点: 两位数字(?=..*\d) 2个大写字符(?=..*[a-z]) 2个小写字符(?=..*[A-Z]) 10到63个字符{10,63}$ 也就是说: (?=.{2,}\d)(?=..*[a-z])(?=..*[A-Z]).{10,63} 然后我想排除一个以字母u开头,以三到六位数结尾的单词: ([uU][0-9]{3,6}) 但是,如何合并这两种模式以执行以下操作: 它不应允许以下内容,因为它分别是: # does not have the required combin

我有以下几点:

  • 两位数字
    (?=..*\d)
  • 2个大写字符
    (?=..*[a-z])
  • 2个小写字符
    (?=..*[A-Z])
  • 10到63个字符
    {10,63}$
也就是说:

(?=.{2,}\d)(?=..*[a-z])(?=..*[A-Z]).{10,63}
然后我想排除一个以字母u开头,以三到六位数结尾的单词:

([uU][0-9]{3,6})
但是,如何合并这两种模式以执行以下操作:

它不应允许以下内容,因为它分别是:

# 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
# 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

应允许以下内容:

# 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
# 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


此处创建并举例:

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

这意味着,如果直接在右边的字符是任何字符的2倍或2倍以上,除了一个换行符后跟一个数字,对于大小写变体也是一样

您可以将模式更新为:

^(?!.*[uU]\d{3,6})(?=(?:\D*\d){2})(?=(?:[^a-z]*[a-z]){2})(?=(?:[^A-Z]*[A-Z]){2}).{10,63}$
部分地

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

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

这意味着,如果直接在右边的字符是任何字符的2倍或2倍以上,除了一个换行符后跟一个数字,对于大小写变体也是一样

您可以将模式更新为:

^(?!.*[uU]\d{3,6})(?=(?:\D*\d){2})(?=(?:[^a-z]*[a-z]){2})(?=(?:[^A-Z]*[A-Z]){2}).{10,63}$
部分地

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

首先,确保字符串包含(例如)两个数字的方法是使用正向前瞻:

(?=.*\d.*\d)
(?![uU]\d{3,6}\D)
您可以将其推广到其他过滤器

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

.{10,63}
如果您说不希望字符串以u开头或u后跟3到6位数字(假定7位就可以了),请使用负前瞻:

(?=.*\d.*\d)
(?![uU]\d{3,6}\D)
需要使用
\D
来确保如果有第7位数字,则字符串将被接受

总而言之:

r'^(?=.*\d.*\d)(?=.*[a-z].*[a-z])(?=.*[A-Z].*[A-Z])(?![uU]\d{3,6}\D).{10,63}$'

首先,确保字符串包含(例如)两个数字的方法是使用正向前瞻:

(?=.*\d.*\d)
(?![uU]\d{3,6}\D)
您可以将其推广到其他过滤器

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

.{10,63}
如果您说不希望字符串以u开头或u后跟3到6位数字(假定7位就可以了),请使用负前瞻:

(?=.*\d.*\d)
(?![uU]\d{3,6}\D)
需要使用
\D
来确保如果有第7位数字,则字符串将被接受

总而言之:

r'^(?=.*\d.*\d)(?=.*[a-z].*[a-z])(?=.*[A-Z].*[A-Z])(?![uU]\d{3,6}\D).{10,63}$'

我的建议是把它分成多个正则表达式——分别测试每个条件。我不理解模式,也不理解为什么应该允许这些条目。请你再详细一点好吗?你的断言不正确。例如,
(?=.{2,}\d)
并不表示2位数字,它意味着如果直接在右边的是任何字符的2倍或更多倍,除了换行符后跟一位数字之外。大写字母和小写字母也是如此(在问题中是相反的)。为什么
ABcd567890
以6位数字结尾而被允许?Gustavovelasch添加了更多细节,它是否提供了更多含义?为什么最后一个
ABcd56U007890
匹配?它结束于
U
和6位数字?请看,我的建议是将其拆分为多个正则表达式-分别测试每个条件。我不理解模式,也不理解为什么应该允许这些条目。请你再详细一点好吗?你的断言不正确。例如,
(?=.{2,}\d)
并不表示2位数字,它意味着如果直接在右边的是任何字符的2倍或更多倍,除了换行符后跟一位数字之外。大写字母和小写字母也是如此(在问题中是相反的)。为什么
ABcd567890
以6位数字结尾而被允许?Gustavovelasch添加了更多细节,它是否提供了更多含义?为什么最后一个
ABcd56U007890
匹配?它结束于
U
和6位数字?看一个好的,这应该行得通。您可以将
[^\d]
替换为
\d
++好的,这样应该可以。您可以将
[^\d]
替换为
\d