如何创建一个接受特定字符的正则表达式?

时间:2019-02-20 04:48:50

标签: java android regex

我有这个正则表达式:

^[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,}$

2 个答案:

答案 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");
}

如果您想解析较大的输入文本并识别出这些匹配的单词,则需要使用正式的PatternMatcher。但是,仅基于您的问题,我认为不需要这样做。

答案 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;
            }