从已输入无效“URL”的表中删除所有行

时间:2017-03-27 08:46:49

标签: sql regex postgresql

对于我们高度具体的用例,有点奇怪的Postgresql问题。我们有一个表格,它接受URL作为我们用户的评论输入的一部分。这是一个高度流量的网站。我们有一些PHP代码验证用户只输入了正确形成的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

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

我们想在PG内部执行此操作。我们可以使数据库脱机以执行此任务,只要它需要。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

尝试此查询,验证输出en然后您可以使用此示例创建DELETE查询。