【发布时间】:2016-07-31 07:20:14
【问题描述】:
我有一个用于在我的 javascript 应用程序中验证密码的正则表达式,如下所示:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$^.*()_])[a-zA-Z\d!@#$^.*()_]{8,64}$/gm
这基本上接受包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符以及长度在 8 到 64 个字符之间的密码。
我希望使用 Unicode classes provided here. 用 Java 重写它
如何将这个 JS 正则表达式翻译成它的 java 等价物?
P.S : 这里提供了一个弱密码的 js 正则表达式的翻译供参考
没有 unicode 类的 JS 正则表达式:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d!@#$^.*()_]{8,64}$/gm
使用 Unicode 类翻译的正则表达式:
^(?=.*\\p{Ll})(?=.*\\p{Lu})(?=.*\\p{N})[\\p{L}\\p{N}]*
【问题讨论】:
-
那个正则表达式太可怕了!使用纯 Java 代码当然会更好。即迭代每个指定字符类中的字符串和计数字符。
-
@StephenC 我也有你的担忧,但是在这里使用 Unicode 字符类常量会很简洁,因为实际上区分大写/小写,所有可能的特殊字符将是一场噩梦通过枚举可能属于这些类中的任何一个的所有可能的字符来实现语言。
-
有一种方法可以测试一个字符是否在给定的 Unicode 字符类中。您无需将字符测试编码为可怕的 switch 语句等。
标签: javascript java regex unicode