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
,后跟3-6位数字u
断言2个数字(?=(?:\D*\D){2})
断言2个小写字符(?=(?:[^a-z]*[a-z]){2}
断言2个大写字符(?=(?:[^A-Z]*[A-Z]){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
,后跟3-6位数字u
断言2个数字(?=(?:\D*\D){2})
断言2个小写字符(?=(?:[^a-z]*[a-z]){2}
断言2个大写字符(?=(?:[^A-Z]*[A-Z]){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