JavaScript中仅限一个URL验证的正则表达式

3

目前我正在使用以下正则表达式

/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/

在IT技术中,我们需要验证URL链接,例如:https://scores.arrowsight.com/scores/ORoom/Hospital%20A1/Hospital%20A2。但是,我们不应该验证这种URL链接:http://www.google.co.in/http://www.google.co.in/。上述URL链接是不允许的,但是这个链接是允许的:http://www.google.co.in/http://www.google.co.in/。请问有谁可以帮我修改代码吗?谢谢!


除了需要进行URL编码之外,该URL是有效的。如果您将其放入浏览器中,它将起作用。您是否只想允许URL安全字符? - Brigand
是的,那是有效的,但我只想验证一个URL而不是两个URL... - priyanka patel
从技术上讲,那是一个URL,但我明白你的意思。 - Brigand
@priyankapatel:并不是有两个URL。那个URL完全有效。 - Blender
1个回答

1
尝试使用负向先行断言的正则表达式:

/^(ftp|https?):\/\/(\w+:{0,1}\w*@)?((?![^\/]+\/(?:ftp|https?):)\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/

实时演示


它只适用于http://www.google.co.in/,而不适用于https://scores.arrowsight.com/scores/ORoom/Hospital%20A1/Hospital%20A2和https://scores.arrowsight.com/。 - priyanka patel
可以稍微修改一下,以禁止在第一个斜杠后的任何位置使用 (?:ftp|https?) - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接