sql - 从已输入无效 "URL"的表中删除所有行

标签 sql regex postgresql

对于我们高度特定的用例,这是一个有点奇怪的 Postgresql 问题。我们有一个表格,它接受 URL 作为用户评论输入的一部分。这是在一个流量很大的网站上。我们有一些 PHP 代码可以验证用户是否只输入了格式正确的 URL,如果他们在评论中包含一个 URL(通常评论文本不包含任何 URL)。

然而,遗憾的是,我们的 PHP 在旧服务器上是旧的。所以在某些时候,我们的 ereg 逻辑变得功能失调。这意味着不法用户在现场输入带有格式错误的 URL 的评论,如下所示:

l%20are%20generally%20included%20almost%20anyplace--even%20if%20your%20"yard"%20is%20bound%20to%20an%20outdoor%20patio%20or%20balcony.Adding%20water%20to%20your%20patio%20could%20be%20as%20simple%20as%20aiming%20a%20low%20dish%20of%20water%20designed%20for%20use%20in%20the%20form%20of%20birdbath.Any%20cursory%20container%20around%206%20in%20.wide%20and%20a%20half-inch%20deep%20will%20attempt%20to%20work.Pie%20pans,%20garbage%20can%20lids,%20or%20flo

请注意,它根本不是 URL。因此,我们的问题是:是否有一种仅适用于 Postgresql 的方法,也许是通过一些 PL/SQL 函数或一些存储函数或其他东西,我们可以使用它来从我们的数据库中删除所有这些垃圾记录?理想情况下,我们不希望使用遍历整个数据库并根据有效 URL 模式对其进行检查的 PHP 程序。

我们想在 PG 本身中执行它。我们可以让数据库脱机来执行此任务,只要它需要。

谢谢!

最佳答案

SELECT * FROM table WHERE url_column !~* '(https?|ftp)://(-\.)?([^\s/?\.#-]+\.?)+(/[^\s]*)?'

尝试这个查询,验证输出 en 然后你可以用这个例子创建一个 DELETE 查询。

关于sql - 从已输入无效 "URL"的表中删除所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041762/

相关文章:

postgresql - 在 Mac 上安装 PostGIS for PostgreSQL 时出错

postgresql - 如何在 Heroku Postgres 数据库中查找 "missing"行?

mysql - 使用 GROUP BY 将查询从 MySQL 转换为 Postgres 和 SQLite

mysql - 针对多个相似选择查询的 Hibernate 性能调优

regex - 通过 R 中的正则表达式查找和替换动态值 ( {{example}} ) 的简单方法

mysql - 在SQL select语句中,为什么使用 "1 order by "或 "order by 1"?

java - 如何在空白模式之间进行选择?

regex - Perl 正则表达式 : replace all\n to "|", 除了 a\n 后跟一些静态文本(abc)

sql - ORA-01843 : not a valid month exception when running as report on maximo

php - Mysql 行始终 = 1