我只需要密码中特定数量的特殊字符。我尝试了以下正则表达式
(?=.*[$@!%*?&]{1})
它从该集合中获取特殊字符,但甚至接受多个特殊字符。
{1}表示我允许字符串验证的集合中的字符数。
例如,
Alpha1?
对于上述正则表达式
@lpha1?
,因为它现在有2个字符。
有人可以帮忙吗? 任何帮助表示赞赏。提前致谢
答案 0 :(得分:2)
试试这个正则表达式:
^[^$@!%*?&\n]*[$@!%*?&][^$@!%*?&\n]*$
<强>解释强>
^
- 断言字符串的开头[^$@!%*?&\n]*
- 匹配不属于这些字符集的任何字符的0次出现:$
,@
,!
,%
, ?
,&
或换行符[$@!%*?&]
- 匹配其中一个字符的匹配项:$
,@
,!
,%
,?
,{{ 1}} &
- 匹配不属于这些字符集的任何字符的0次出现:[^$@!%*?&\n]*
,$
,@
,!
, %
,?
或换行符&
- 断言字符串的结尾JAVA代码:(Generated here)
$
更新
要获得包含2个特殊字符的字符串,请使用:
^(?:[^$@!%*?&\n]*[$@!%*?&]){2}[^$@!%*?&\n]*$
获得正好5个spl的字符串。字符,将{2}替换为{5}。
要获取包含2-5个特殊字符的字符串,请使用{2-5}
答案 1 :(得分:1)
在Java中,您可以使用replaceAll
方法过滤所有字符,直到您的特殊字符集。该方法将正则表达式作为参数。结果的大小表示特殊字符的数量:
String password = "@foo!";
int size = password.replaceAll("[^$@$!%*?&]","").length();
System.out.println(size);
// will print 2