这是url验证正则表达式
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
这可以正常工作。但是如果我输入带有端口号的url,例如http://localhost:3000,它会给出一个错误。如何将此表达式更改为也接受端口号?
xtupzzrd1#
请试试这个https?:\/\/(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))https?:这部分匹配URL的协议。s是可选的,所以它匹配http和https。:\/\/:匹配协议中的冒号和两个正斜杠。(?:w{1,3}\.)?:如果存在,则匹配可选的www子域。(?:)创建一个非捕获组,{1,3}量词匹配字母“w”的1到3个示例。[^\s.]+:匹配域名,域名由一个或多个非空格或点的字符组成。(?:\.[a-z]+)*:匹配域之前的所有可选子域,以点分隔。(?:)创建另一个非捕获组,* 量词匹配该组的零个或多个示例。[a-z]+匹配一个或多个小写字母。(?::\d+)?:这匹配一个可选的端口号,该端口号可能位于域之后,前面有一个冒号。)创建另一个非捕获组,而?限定符使其可选。匹配冒号,\d+匹配一个或多个数字。(?![^<]*(?:<\/\w+>|\/?>)):这是一个负先行,确保URL不是HTML标签的一部分。它检查URL之前是否没有匹配(?:<\/\w+>|\/?>)模式的字符,该模式匹配任何关闭HTML标签或空标签。
https?:\/\/(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))
https?
:\/\/
(?:w{1,3}\.)?
[^\s.]+
(?:\.[a-z]+)*
(?::\d+)?
(?![^<]*(?:<\/\w+>|\/?>))
(?:<\/\w+>|\/?>)
1条答案
按热度按时间xtupzzrd1#
请试试这个
https?:\/\/(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))
https?
:这部分匹配URL的协议。s是可选的,所以它匹配http和https。:\/\/
:匹配协议中的冒号和两个正斜杠。(?:w{1,3}\.)?
:如果存在,则匹配可选的www子域。(?:)创建一个非捕获组,{1,3}量词匹配字母“w”的1到3个示例。[^\s.]+
:匹配域名,域名由一个或多个非空格或点的字符组成。(?:\.[a-z]+)*
:匹配域之前的所有可选子域,以点分隔。(?:)创建另一个非捕获组,* 量词匹配该组的零个或多个示例。[a-z]+匹配一个或多个小写字母。(?::\d+)?
:这匹配一个可选的端口号,该端口号可能位于域之后,前面有一个冒号。)创建另一个非捕获组,而?限定符使其可选。匹配冒号,\d+匹配一个或多个数字。(?![^<]*(?:<\/\w+>|\/?>))
:这是一个负先行,确保URL不是HTML标签的一部分。它检查URL之前是否没有匹配(?:<\/\w+>|\/?>)
模式的字符,该模式匹配任何关闭HTML标签或空标签。