URL验证的正则表达式(在JavaScript中)

Mar*_*tój 22 javascript regex validation url

是否有人使用正则表达式来验证网址(不是在文本段落中找到它们)?JavaScript代码段将是首选.

Aks*_*lén 50

接受的答案中, bobince做对了:仅验证方案名称://,空格和双引号通常就足够了.以下是如何在JavaScript中实现验证:

var url = 'http://www.google.com';
var valid = /^(ftp|http|https):\/\/[^ "]+$/.test(url);
// true
Run Code Online (Sandbox Code Playgroud)

要么

var r = /^(ftp|http|https):\/\/[^ "]+$/;
r.test('http://www.goo le.com');
// false
Run Code Online (Sandbox Code Playgroud)

要么

var url = 'http:www.google.com';
var r = new RegExp('/^(ftp|http|https):\/\/[^ "]+$/');
r.test(url);
// false
Run Code Online (Sandbox Code Playgroud)

语法参考:

  • +1为W3Schools讨厌获得不必要的-1. (31认同)
  • @DerekHenderson你走了,你W3Schools仇恨;) (8认同)
  • 此代码不适用于许多 URL。检测 URL 时,最好依赖专门的库。[原因如下](http://stackoverflow.com/a/21925491/1269037)。 (3认同)

bob*_*nce 27

实际的URL语法非常复杂,并且不容易在正则表达式中表示.大多数看起来很简单的正则表达式会产生许多假阴性和误报.看看这些努力的娱乐性,但即使最终结果也不好.

此外,您通常希望允许IRI以及旧式URI,因此我们可以链接到有效地址,例如:

http://en.wikipedia.org/wiki/Þ
http://??.???/
Run Code Online (Sandbox Code Playgroud)

我只会去进行简单的检查:它是从一个已知良好的方法开始的:名字?它没有空格和双引号吗?如果是这样那么地狱,它可能已经足够好了.

  • /(ftp | https?):\ /\/ [^"] + $ / (3认同)
  • 好.至少现在我知道在大多数情况下这可能不值得:]谢谢. (2认同)

Mus*_*han 16

试试这个正则表达式

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

它最适合我.

  • 我认为这是用于 url 验证的最佳正则表达式 (2认同)
  • 这不适用于以下网址:www.google.com,gogl.com,http://google.clo,www.google.co.in,www.goo.com.in.ssd (2认同)

小智 6

这个 REGEX 是 @Aamir 答案的一个补丁,对我有用

/((?:(?:http?|ftp)[s]*:\/\/)?[a-z0-9-%\/\&=?\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?)/gi
Run Code Online (Sandbox Code Playgroud)

它匹配这些 URL 格式

  1. yourwebsite.com
  2. yourwebsite.com/4564564/546564/546564?=adsfasd
  3. www.yourwebsite.com
  4. http://yourwebsite.com
  5. https://yourwebsite.com
  6. ftp://www.yourwebsite.com
  7. ftp://yourwebsite.com
  8. http://yourwebsite.com/4564564/546564/546564?=adsfasd


小智 5

我已经找到了一些成功的方法:

/^((ftp|http|https):\/\/)?www\.([A-z]+)\.([A-z]{2,})/
Run Code Online (Sandbox Code Playgroud)
  • 它检查以下一项或一项:ftp://,http://或https://
  • 它需要www。
  • 它检查任何数量的有效字符。
  • 最后,它检查它是否具有域并且该域至少包含2个字符。

这显然不是完美的,但是可以很好地处理我的案件