【问题标题】:Find certain special characters using regex使用正则表达式查找某些特殊字符
【发布时间】:2021-09-09 01:01:10
【问题描述】:

我想知道输入字段是否包含某些特殊字符,例如 。如果用户输入包含这些字符中的任何一个,它应该返回 true。

示例 :Robert# ,S%am

public static boolean isInvalidCharacters(String input) throws Exception {
    try {

        Pattern pattern = Pattern.compile("[^<(@#$%^&*>]");
        Matcher matcher = pattern.matcher(input);
        boolean isFound =matcher.find();
        if (!isFound) {
            return true;
        } else {
            return false;
        }
    } catch (Exception err) {
        throw err;
    }

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您的表达本质上是正确的,但需要补全,以便标记的不是一个字符,而是一个字符串。

    试试这个正则表达式

    ^[^<(@#$%^&*>]+$
    

    Demo

    Java 示例

    public static void main(String[] args) {
        String input = "abcd\nabcd@";
    
        Pattern pattern = Pattern.compile("^[^<(@#$%^&*>]+$");
        Matcher matcher = pattern.matcher(input);
        boolean isFound = matcher.find();
    
        System.out.println(!isFound);
    }
    

    还有一个没有正则表达式的简单解决方案

    boolean isFound = "<(@#$%^&*>"
            .chars()
            .mapToObj(x -> String.valueOf((char) x))
            .anyMatch(input::contains);
    

    【讨论】:

    • 提问者询问“输入字段是否包含某些特殊字符”,这显然可以直接检查,而不是检查整个字符串是否由特殊字符的否定组成。除此之外,如果您想匹配整个字符串,您可以简单地将find() 替换为matches(),而不是在正则表达式中添加^$。 “简单的解决方案”是否更简单,值得商榷。
    【解决方案2】:

    在您的代码中,问题是前导 ^ 字符。您可以像这样进一步简化它,

    public static boolean isInvalidCharacters(String input) throws Exception {
        try {
            Pattern pattern = Pattern.compile("[<()@#$%^&*>]");
            Matcher matcher = pattern.matcher(input);
            return matcher.find();
        } catch (Exception err) {
            throw err;
        }
    }
    

    注意:trueisFound = false时返回逻辑无效。

    编辑

    您可以进一步简化,因为不需要 try-catch 块。

    public static boolean isInvalidCharacters(String input) {
        Pattern pattern = Pattern.compile("[<()@#$%^&*>]");
        Matcher matcher = pattern.matcher(input);
        return matcher.find();
    }
    

    【讨论】:

    • 乐于助人。您还可以找到有关正则表达式 here 的更多信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多