[英]Regular expression for validation
我需要使用Java验证密码字符串。 这是验证的要求:
在拧了几下并将头撞到墙上几次之后,我想出了这个正则表达式
if (!password.matches("^(?=.+[0-9])(?=.+[a-zA-Z])(?=.+[\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E])[0-9a-zA-Z\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E]{8,20}$")) {
}
看起来太可怕和疯狂。 有没有更好的方法来实现这一使命?
我建议使用正则表达式来表达他们最擅长的东西,但是使用正则表达式做得不好的代码。 像这样的东西。 (对不起,我还没有测试过这段代码,但即使我犯了错误也无法运行。)
Pattern special_chars = Pattern.compile("[!@#$%^&*()_+=-~`\][{};':\"/.>?,<]");
Pattern number_chars = Pattern.compile("[0-9]");
Pattern letter_chars = Pattern.compile("[a-zA-Z]");
boolean valid;
valid = (special_chars.matcher(password).find() &&
number_chars.matcher(password).find() &&
letter_chars.matcher(password).find() &&
8 <= password.length() && password.length() <= 20);
用番石榴CharMatcher
。
// at least 1 number
CharMatcher.inRange('0', '9').countIn(password) >= 1 &&
// at least 1 alphabet character
CharMatcher.inRange('a', 'z').or(inRange('A', 'Z')).countIn(password) >= 1 &&
// at least 1 character from set !@#$%^&*()_+=-~`][{};':"/.>?,<
CharMatcher.anyOf("!@#$%^&*()_+=-~`][{};':\"/.>?,<").countIn(password) >= 1 &&
// 8 to 20 characters
password.length() >= 8 && password.length() <= 20
假设你想要拉丁字母
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.