0

我们有正则表达式来验证一个数字,一个大写字母和一个小写字母的密码。正则表达式是:

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

此正则表达式不允许任何特殊字符。我需要更改正则表达式以允许一些特殊字符列表,并且不应该有任何限制必须至少有一个特殊字符。只[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]应允许作为特殊字符,没有必须有一个限制。

我试过了:

^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])(?=\w*[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]*)\w*$ 

这似乎是错误的。请有人帮忙。

4

1 回答 1

2

这是因为\w*之前$。您特别尝试将 0 匹配到许多单词..试试这个:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[-\w!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]+$

或者

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\w\p{Punct}]+$

\p{Punct}是一个特殊的字符类,类似于[!"#$%&'()*+,\-./:;<=>?@[\\\]^_{|}~]

于 2013-05-24T10:21:49.757 回答