3

我想编写一个正则表达式,它将匹配由 8 个字符组成的任何单词,这些字符应该属于字符集:[A-Za-z0-9]。

但是,它们应该由 3 个字符集中的每个字符(大写、小写和数字)中的至少一个字符组成。

这是我正在使用的正则表达式:

^[a-zA-Z0-9]{8}$

但是,这将匹配以下示例:

09823983
language
mainMenu

但我想匹配这样的词:

uXk3mHy9

我怎样才能使用正则表达式来做到这一点?

4

2 回答 2

5

look-ahead您可以在正则表达式前面使用三个s:

^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8}$
于 2012-11-16T05:27:24.697 回答
1

不要在一个正则表达式中完成所有操作。正则表达式不是所有解决方案都必须来自的神奇工具箱。

检查三种不同的条件,而不是将它们全部塞进一个正则表达式中。在 Perl 中,这将是:

$ok = ( $s =~ /^[a-zA-Z0-9]{8}$/ && $s =~ /[a-z]/ && $s =~ /[A-Z]/ && $s =~ /[0-9]/ );

你的意图是什么要清楚得多。

于 2012-12-04T21:52:31.907 回答