大学论坛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
相关产品推荐
相关产品推荐

