我想写一个正则表达式,它将匹配由8个字符组成的任何单词,这些字符应该属于字符集:[A-Za-z0-9]。
但是,它们应该包含3个字符集中的至少一个字符(大写,小写和数字)。
这是我正在使用的正则表达式:
^[a-zA-Z0-9]{8}$
但是,这将匹配以下示例:
09823983
language
mainMenu
但我希望匹配以下字词:
uXk3mHy9
如何使用正则表达式执行此操作?
答案 0 :(得分:5)
您可以在正则表达式前面使用三个look-ahead
:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8}$
答案 1 :(得分:1)
不要在一个正则表达式中完成所有操作。正则表达式不是一个神奇的工具箱,所有解决方案都必须来自这个工具箱。
检查三种不同的条件,而不是将它们全部塞进一个正则表达式。在Perl中,这将是:
$ok = ( $s =~ /^[a-zA-Z0-9]{8}$/ && $s =~ /[a-z]/ && $s =~ /[A-Z]/ && $s =~ /[0-9]/ );
你的意图更清楚。