带有美式键盘中所有特殊字符的字母数字正则表达式

时间:2017-08-01 21:50:50

标签: java regex

关于正则表达式的另一个问题。 这是我的要求:

  1. 应该接受所有字母。
  2. 至少应有一个大写字母。
  3. 至少应有1个数字。
  4. 总长度应至少为8。
  5. 仅接受常规美式键盘布局中的所有特殊字符。
  6. 以下是我的想法

    ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[-=+/\\]`~!@#$%^&*()_+\\[;',.{}|:\\\"<>?])(?=^\\p{ASCII}*$)(?=\\S+$).{8,}$ 
    

    但这不适用于\\Admin123

    感谢任何帮助。

    更新 谢谢@Pshemo。想知道,如果有更短的方法吗?而不是在正则表达式本身中包含所有特殊字符。

1 个答案:

答案 0 :(得分:2)

我建议你使用更具可读性的重构正则表达式:

final String re = 
             "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\\p{Punct})[\\p{ASCII}&&[\\S]]{8,}$";

Code Demo

RegEx分手:

  • ^:开始
  • (?=.*[0-9]):预见断言我们至少有一位数字
  • (?=.*[a-z]):预见断言我们至少有一个小写字母
  • (?=.*[A-Z]):预见断言我们至少有一个大写字母
  • (?=.*\\p{Punct}):预见断言我们至少有一个标点字符
  • [\\p{ASCII}&&[\\S]]{8,}:用于匹配8个或更多 ASCII 非白色空间字符的交叉复合字符类
  • $:结束