regex 一个正则表达式,验证一个网址,并匹配一个空字符串?

6ojccjat  于 2022-11-18  发布在  其他
关注(0)|答案(4)|浏览(110)

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

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

kjthegm61#

如果要修改表达式以匹配完全空的字符串或**完整的URL,则需要使用锚元字符^和$(分别匹配行的开头和结尾)。

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

正如dirktgently指出的,您可以稍微简化协议的匹配,所以我也将其包括在内。
但是,如果您在程序或脚本中使用此表达式,则使用语言自己的检查输入是否为空的方法可能会更简单。

// 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
fwzugrvs

fwzugrvs2#

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

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

zf2sa74q3#

在表达式周围使用表达式标记^$,并将|^$添加到末尾。这样,您就将|or运算符与两个表达式一起使用,表明您有两种不同的匹配情况。

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

这里的关键是|^$表示“或匹配空白”。
此外,如果使用模板字符串,则表达式仅在JavaScript中有效。

plupiseo

plupiseo4#

Expr?其中Expr是您的URL匹配器。就像我对httphttps所做的那样:https??被称为量词--您可以查找它。来自Wikipedia
?问号表示前面的元素为零或一个。

相关问题