特定字符

时间:2017-10-25 23:59:37

标签: java regex

我只需要密码中特定数量的特殊字符。我尝试了以下正则表达式

(?=.*[$@!%*?&]{1})

它从该集合中获取特殊字符,但甚至接受多个特殊字符。

{1}表示我允许字符串验证的集合中的字符数。

例如,

Alpha1?对于上述正则表达式

应该是真的 上面的正则表达式不应该验证

@lpha1?,因为它现在有2个字符。

有人可以帮忙吗? 任何帮助表示赞赏。提前致谢

2 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

^[^$@!%*?&\n]*[$@!%*?&][^$@!%*?&\n]*$

<强>解释

  • ^ - 断言字符串的开头
  • [^$@!%*?&\n]* - 匹配不属于这些字符集的任何字符的0次出现:$@!%?&或换行符
  • [$@!%*?&] - 匹配其中一个字符的匹配项:$@!%?,{{ 1}}
  • & - 匹配不属于这些字符集的任何字符的0次出现:[^$@!%*?&\n]*$@!%?或换行符
  • & - 断言字符串的结尾

Click for Demo

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