2

所以我试图匹配一个(任何)单词:

  1. 至少有一个大写字母
  2. 至少一个小写字母
  3. 至少一个数字

我目前使用前瞻来解决这个问题

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$

但我无法用一个词来匹配它。我尝试使用\b前瞻,但它不起作用。我试图匹配的单词可以以任何顺序具有上述条件。示例:aB5 OR Ba5 OR 5Ba 等。需要一些指针。

4

2 回答 2

3

主要问题是.包括空格。您需要将.'s 更改为仅限于单词字符,即\w. 请注意\w(大多数情况下)[A-Za-z0-9_],如果您希望排除其中一些或包含更多,您应该进行适当的更改。

另一件事是,如果您要在字符串中查找单词,则需要删除^and$因为它们分别表示字符串的开头和结尾。

由于您的所有要求都是“至少”(与“最多”相反),因此您并不真正需要\b,因为匹配是从左到右进行的,因此您永远无法获得单词的一部分。

正则表达式:

(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w+

测试

于 2013-08-13T15:50:59.673 回答
2

我目前使用前瞻来解决这个问题

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$

但我无法用一个词来匹配它。

前瞻是正确的方法,但是如果您只想查找单个单词,则不能允许.中间的每个字符( ),而只能允许单词字符(如\w)。所以

/(?=\w*\d)(?=\w*[a-z])(?=.\w[A-Z])\w+/g

应该这样做。当然,您可以自由地允许更多的字母\w,甚至可能\S

于 2013-08-13T15:53:04.153 回答