【问题标题】:Regexp to validate URL in MySQL正则表达式在 MySQL 中验证 URL
【发布时间】:2015-06-24 20:15:21
【问题描述】:

我已经尝试了几种用于 URL 验证的正则表达式模式(设计用于 PHP,因为我找不到任何用于 MySQL),但它们都不起作用。可能 MySQL 的语法略有不同。

我也尝试过,但没有成功。

那么有谁知道一个相当好的正则表达式与 MySQL 一起用于 URL 验证?

【问题讨论】:

  • 您要验证什么?如果输入字符串是可以解析的有效 URL?
  • 不,我想SELECT 所有与 URL 模式不匹配的行。 (所以所有无效的网址)
  • 允许哪些类型的 URL?您认为验证有多严格?

标签: mysql regex pattern-matching


【解决方案1】:

根据MySQL's documentation中的文章11.5.2. Regular Expressions,您可以使用以下语法使用正则表达式执行选择

SELECT field FROM table WHERE field REGEX pattern

为了匹配简单的 URL,你可以使用

SELECT field FROM table
 WHERE field REGEXP "^(https?://|www\\.)[\.A-Za-z0-9\-]+\\.[a-zA-Z]{2,4}"

这将匹配大多数网址,如

但不是

【讨论】:

  • 太棒了。还有一个问题。是否可以将http://www 设为可选?我希望它也匹配example.comsubdomain.example.com。这很容易吗?
  • 让它可选?在哪里?如果您在谈论插入时,这一切都应该在插入之前完成,因此您甚至不需要在选择时匹配 url。关于你的问题,是的,这很容易做到,但这也意味着像 backup.2012-01-27.xml 这样的东西会得到匹配。
  • 请注意,http://about.museum 不会被匹配为有效,但www.foo.bar, with spaces! 将作为有效通过。
  • 不适用于新域。也不适用于外来字符。 дизайнрекламы.рф、online.solutions 等
【解决方案2】:

虽然高宝发布的答案有效,但转义存在一些不一致之处。

正确的语法应该是,这种语法在 MySQL 和 PHP 中都适用。

SELECT field FROM table
 WHERE field REGEXP "^(https?:\/\/|www\.)[\.A-Za-z0-9\-]+\.[a-zA-Z]{2,4}"

上面的代码只有在 'field' 的内容以 URL 开头时才会匹配。如果您想匹配字段包含 url 的所有行(例如被其他文本/内容包围),只需使用:

SELECT field FROM table
 WHERE field REGEXP "(https?:\/\/|www\.)[\.A-Za-z0-9\-]+\.[a-zA-Z]{2,4}"

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2015-09-07
    • 2013-08-24
    • 2011-07-30
    • 1970-01-01
    • 2012-03-29
    • 2019-05-19
    相关资源
    最近更新 更多