php - 可以使用正则表达式通过 php 表单将可以输入 MySQL 数据库的单词列入黑名单

标签 php mysql regex blacklist

好的,目前我的网站上有一个将单词列入黑名单的功能,如果它在提交表单时检测到它们,则不会提交帖子,这里是:

$disallowedWords = array(
'list','of','bad','words'
);

foreach ($disallowedWords as $word) {
  if (preg_match("/\s+$word\s+/i", $entry)) {
    die('The word or phrase ' . $word . ' is not allowed...');
  }
}

$urlRegex = '(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*';
if (preg_match($urlRegex, $entry)) {
  die('The word or phrase ' . $word . ' is not allowed...');

} 

这适用于这样的句子:

Here is a list

它会停止发布并说不允许使用单词列表,但是如果我输入:

here is a listt

here is alist

它不起作用,那么,我如何(如果可能的话)让它审查那个确切的字母组合?或者任何会导致我无法输入“listt”或“alist”等的效果。

最佳答案

使用 \b$word\b 而不是 \s$word\s 也将匹配标点符号包围的单词或字符串的开头/结尾。 (从技术上讲,\b 是一个 zero-width assertion,它匹配单词和非单词字符之间的边界。)

当然,这仍然不能解决Scunthorpe problem .

关于php - 可以使用正则表达式通过 php 表单将可以输入 MySQL 数据库的单词列入黑名单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798267/

相关文章:

php - Laravel 5.2 身份验证不适用于前缀组下的隐式路由

php - 在准备好的语句的 where 子句中使用计数值

php - 用于匹配 CSS 媒体查询的递归/子例程正则表达式

Ruby:反斜杠字符串中的所有非字母数字字符

Javascript RegEx 替换所有不在 HTML 标签内的字符

从 excel 文件读取日期字段的 PHPExcel 问题

php - 如何删除多对多关系表中的一条数据

php - 如何在用 php 收到 MySQL 结果后,但在编码为 json 之前,按类型对 MySQL 结果进行分组?

mysql - 为什么人们在新数据库的列中保存 X 的计数?

mysql - 保持缓存和数据库连接打开