我需要一个正则表达式来匹配以下规则。
1. Atleast 1 numerical character.
2. Atleast 1 of these (!, @, #, $, %, _) non-alphanumeric characters.
3. Uppercase alphabets.
4. Lowercase alphabets
我尝试创建一个如下所示的模式,但问题是任何字符都可以位于任何位置。我有点被困在这里。
^[[A-Z]+[a-z]+[0-9]+[!@#\\$%_]+]$
这些应满足上述每个条件。
1. [0-9]+
2. [!@#\\$_%]+
3. [A-Z]+
4. [a-z]+
但我如何将它们组合在一起,以便它们可以以任何顺序出现,但每个组至少出现一次。
解决方案:
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#$%_])[A-Za-z0-9!@#$%_]*$
最佳答案
您需要使用 positive lookahead assertions分别独立地检查每个条件:
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%_]).*$
将匹配至少包含其中每个字符之一的任何字符串(但也可能包含其他字符)。
前瞻实际上并不参与匹配(这就是为什么你可以将它们一个接一个地放置 - 它们都锚定在字符串的开头),但它们会查看其中包含的正则表达式可以 在当前位置匹配。
解释:
^ # Start of string.
(?= # Look ahead to see if it's possible to match...
.* # any string
[A-Z] # followed by one uppercase ASCII letter.
) # End of lookahead.
(?=.*[a-z]) # Same for lowercase ASCII letter
(?=.*[0-9]) # Same for ASCII digit
(?=.*[!@#$%_]) # Same for this list of "special" characters
.* # Now match any string.
$ # End of string.
关于java - 匹配这些规则的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20095989/