代码之家  ›  专栏  ›  技术社区  ›  Peter Morris

验证网址并匹配空字符串的regex?

  •  3
  • Peter Morris  · 技术社区  · 15 年前

    当前表达式验证Web地址(HTTP),如何更改它以使空字符串也匹配?

    (http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
    
    3 回复  |  直到 15 年前
        1
  •  5
  •   Alex Barrett    15 年前

    如果要修改表达式以匹配 任何一个 完全空的字符串 完整的URL,您将需要使用锚元字符^和$(分别与行首和行尾匹配)。

    ^(|https?:\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)$
    

    正如尖锐地指出的那样,您可以简化对协议的匹配,所以我也为您提供了这个。

    但是,如果您在程序或脚本中使用这个表达式,那么使用语言自己的方法检查输入是否为空可能会更简单。

    // in no particular language...
    if input.length > 0 then
        if input matches <regex> then
            input is a URL
        else
            input is invalid
    else
        input is empty
    
        2
  •  0
  •   Gumbo    15 年前

    将整个表达式放在括号中,并将其标记为可选(__ ? _量词,无或一次重复):

    ((http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)?
    
        3
  •  0
  •   dirkgently    15 年前

    Expr? 哪里 Expr 是您的URL匹配器。就像我想的那样 http https : https? . 这个 ? 是一个被称为量词的量词——你可以查到它。从 Wikipedia :

    ?问号表示前面的元素为零或一个。