You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大学论坛APP开发:EditText违规词汇与URL拦截校验失效问题

大学论坛APP内容校验问题

我正在开发一款大学论坛APP,需要限制用户发布讨论时输入违规词汇或URL链接。目前给EditText加了简单校验:如果文本包含预设集合里的字符串,就弹出提示“请避免发布违规词汇/URL”。但现在有问题:当用户输入“www”或者“idjot”这类内容时,不会触发提示,数据直接存入Firebase数据库。我需要实现只要文本命中预设集合里的任意内容(包含部分匹配),就弹出警告并阻止发布。

预设违规集合示例:

String[] items = { "idiot", "www.youtube.com", ...};

当前校验代码:

discussion= discussion_description.getText().toString();

if (Arrays.asList(items).contains(discussion)){
    AlertDialog.Builder builder = new AlertDialog.Builder(AddingDiscussionActivity.this);
    builder.setMessage("请避免发布违规词汇/URL")
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
}

修复方案

当前代码的问题在于Arrays.asList(items).contains(discussion)是判断整个输入文本是否完全等于集合中的某一项,而不是判断输入文本是否包含集合中的任意违规子串。要实现需求,需要遍历违规集合,逐一检查输入文本是否包含每个违规项:

1. 修改核心校验逻辑

替换原来的判断条件,改为遍历违规集合,检查输入是否包含任一违规内容:

discussion = discussion_description.getText().toString().trim();
boolean hasViolation = false;

// 遍历违规集合,检查输入文本是否包含任一违规项
for (String item : items) {
    if (discussion.contains(item)) {
        hasViolation = true;
        break;
    }
}

if (hasViolation) {
    AlertDialog.Builder builder = new AlertDialog.Builder(AddingDiscussionActivity.this);
    builder.setMessage("请避免发布违规词汇/URL")
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // 可选:清空输入框,提升用户体验
                    discussion_description.setText("");
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
} else {
    // 无违规内容,执行存入Firebase的逻辑
    saveToFirebase(discussion);
}

2. 大小写兼容优化(可选)

如果需要忽略大小写(比如输入“Idiot”“WWW”也能被检测),可以修改判断条件:

if (discussion.toLowerCase().contains(item.toLowerCase())) {
    hasViolation = true;
    break;
}

3. URL专项检测(可选)

如果需要覆盖所有可能的URL格式(不止预设的几个),可以搭配正则表达式检测:

// 匹配HTTP/HTTPS链接或WWW开头的URL
String urlRegex = "(https?://|www\\.)\\S+";
Pattern urlPattern = Pattern.compile(urlRegex);
Matcher urlMatcher = urlPattern.matcher(discussion);

// 同时检查违规词汇和URL
if (hasViolation || urlMatcher.find()) {
    // 复用之前的弹窗逻辑
    AlertDialog.Builder builder = new AlertDialog.Builder(AddingDiscussionActivity.this);
    builder.setMessage("请避免发布违规词汇/URL")
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    discussion_description.setText("");
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
}

内容的提问来源于stack exchange,提问作者CMRyle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:05:27