当前表达式验证了一个Web地址(HTTP),如何更改它以使空字符串也匹配?
(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
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
fwzugrvs2#
将整个表达式放在括号中,并将其标记为可选(“?“量词,不重复或重复一次)
?
((http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)?
zf2sa74q3#
在表达式周围使用表达式标记^$,并将|^$添加到末尾。这样,您就将|or运算符与两个表达式一起使用,表明您有两种不同的匹配情况。
^$
|^$
|
or
^(https?:\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)$|^$
这里的关键是|^$表示“或匹配空白”。此外,如果使用模板字符串,则表达式仅在JavaScript中有效。
plupiseo4#
Expr?其中Expr是您的URL匹配器。就像我对http和https所做的那样:https?。?被称为量词--您可以查找它。来自Wikipedia:?问号表示前面的元素为零或一个。
Expr?
Expr
http
https
https?
4条答案
按热度按时间kjthegm61#
如果要修改表达式以匹配完全空的字符串或**完整的URL,则需要使用锚元字符^和$(分别匹配行的开头和结尾)。
正如dirktgently指出的,您可以稍微简化协议的匹配,所以我也将其包括在内。
但是,如果您在程序或脚本中使用此表达式,则使用语言自己的检查输入是否为空的方法可能会更简单。
fwzugrvs2#
将整个表达式放在括号中,并将其标记为可选(“
?
“量词,不重复或重复一次)zf2sa74q3#
在表达式周围使用表达式标记
^$
,并将|^$
添加到末尾。这样,您就将|
or
运算符与两个表达式一起使用,表明您有两种不同的匹配情况。这里的关键是
|^$
表示“或匹配空白”。此外,如果使用模板字符串,则表达式仅在JavaScript中有效。
plupiseo4#
Expr?
其中Expr
是您的URL匹配器。就像我对http
和https
所做的那样:https?
。?
被称为量词--您可以查找它。来自Wikipedia:?问号表示前面的元素为零或一个。