我有这个正则表达式:
^[a-zA-Z0-9_@.#$%&'*+-/=?^`{|}~!(),:;<>[-\]]{8,}$
我需要一个正则表达式来接受最小字长为8,字母(大写和小写),数字和以下字符:
!#$%&'* +-/ =?^ _`{|}〜“(),:: <> @ []
当我测试here时,它可以工作。
这就是我在Java Android中使用它的方式。
public static final String regex = "^[a-zA-Z0-9_@.#$%&'*+-/=?^`{|}~!(),:;<>[-\\]]{8,}$";
这是我收到的错误。
java.util.regex.PatternSyntaxException: Missing closing bracket in character class near index 49
^[a-zA-Z0-9_@.#$%&'*+-/=?^`{|}~!(),:;<>[-\]]{8,}$
答案 0 :(得分:1)
如果您只想测试给定的输入字符串是否与您的模式匹配,则可以直接使用String#matches
,例如
String regex = "[a-zA-Z0-9_@.#$%&'*+-/=?^`{|}~!(),:;<>\\[\\]-]{8,}";
String input = "Jon@Skeet#123";
if (input.matches(regex)) {
System.out.println("Found a match");
}
else {
System.out.println("No match");
}
如果您想解析较大的输入文本并识别出这些匹配的单词,则需要使用正式的Pattern
和Matcher
。但是,仅基于您的问题,我认为不需要这样做。
答案 1 :(得分:0)
您必须使用模式行销器概念。它可能会帮助您。
遵循教程:https://www.mkyong.com/regular-expressions/how-to-validate-password-with-regular-expression/
这里是一个例子。
try {
Pattern pattern;
Matcher matcher;
final String PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";
pattern = Pattern.compile(PASSWORD_PATTERN);
matcher = pattern.matcher(password_string );
if(matcher.matches()){
Log.e("TAG", "TRUE")
}else{
Log.e("TAG", "FALSE")
}
} catch (RuntimeException e) {
return false;
}