0

URL 必须采用以下形式:http://host.domain/scriptname.extension,无查询字符串。即,这是一个有效的 URL:http://abc.axx.loc:8000/abcd.aspx。我试着像下面那样做,但效果不好,有人可以帮忙吗?谢谢。

var RegExp = /((h|H)(t|T)(t|T)(p|P)|(h|H)(t|T)(t|T)(p|P)(s|S)):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?\/\w+\.\w+$/;
4

4 回答 4

0

这个问题有点模糊,但试试这个:

/http:\/\/(\w+)\.(\w+)\/(\w+)\.(\w+)/i

http://rubular.com/r/Vnoxj11cEC

于 2012-10-01T16:46:10.813 回答
0

尝试以下操作:

var RegExp = /^https?:\/\/\w+\.\w+\/\w+\.\w+(:\d+)?$/i

这将在您提供的模型中有效http地使用不区分大小写的 url 。https

final i(它被命名为修饰符)为不区分大小写的技巧做了所有的魔法。

于 2012-10-01T16:46:29.673 回答
0
/((h|H)(t|T)(t|T)(p|P)|(h|H)(t|T)(t|T)(p|P)(s|S)):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?\/\w+\.\w+$/.test("http://abc.axx.loc:8000/abcd.aspx")

工作表。但是,有几点:

  • 你不应该命名那个变量RegExp- 那是 JS 正则表达式的构造函数,不应该被覆盖
  • 使用不区分大小写的正则表达式来绕过那个丑陋的(h|H)... 方案
  • \S+匹配所有非空白字符,这几乎是 URL 中的所有内容。这可能允许您不想要的查询字符串。
  • 你似乎忘记了字符串开始锚点

我建议

/^https?:\/\/(\w+(:\w+)?@)?[\w.]+(:\d+)?\/\w+\.\w+$/i

或使用用户登录省略该部分,只允许@:在域中:

/^https?:\/\/[\w.:@]+\/\w+\.\w+$/i
于 2012-10-01T17:31:49.137 回答
-1
var RegExp = /^https?\/\/[\w\-\.]+(:\d+)?\/[\w\-]+\.[\w\-]+$/i;

注意 // 块 [\w\-\.]+ 用于主机和域组合之后。它应该匹配 host.domain 以及 host.subdomain1.subdomain2.domain 等。

开头和结尾的 ^ 和 $ 很重要,因此它匹配字符串的开头和结尾。

还要注意 \w\- 的使用,因为单独的 \w 是不够的,因为它不捕获破折号。

于 2012-10-01T16:51:20.917 回答