2012-10-01 23 views
0

URL必须采用以下格式:http://host.domain/scriptname.extension,无查询字符串。 即,这是一个有效的网址:http://abc.axx.loc:8000/abcd.aspx。 我试图像下面这样做,但它运作不好,任何人都可以帮忙?谢谢。正则表达式URL必须采用以下格式:http://host.domain/scriptname.extension,无查询字符串

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+$/; 
+0

你应该给出更多的条件是什么要求。 –

+0

这是客户端验证,功能在js文件中。 in js: function isValidURL(url){ if(url ==“”){ return false; } url == $ .trim(url); (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 + $ /;?。 (RegExp。 if(RegExp。test(url)){ return true; } else { return false; } } – Andrew

+1

有一些例子在http://msdn.microsoft.com/en-us/library/ff650303.aspx – jrummell

回答

-1
var RegExp = /^https?\/\/[\w\-\.]+(:\d+)?\/[\w\-]+\.[\w\-]+$/i; 

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

开始和结束处的^和$是重要的,因此它匹配字符串的开始和结束。

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

+0

不需要重复每个字符UPPER和更低,看'i'修饰符。 –

+0

感谢您的反对。如何非常亲你 –

+0

谢谢你们,这是一个有效的网址:http://abc.axx.loc:8000/abcd.aspx,但它不能通过。 – Andrew

0

尝试以下操作:

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

这将有效的URL不区分大小写的httphttps与您提供的模型。

最后的i(它被命名为修饰符)为大小写不敏感的技巧做出了所有的魔法。

+0

谢谢,但是当我添加端口,它不起作用。像这样的网址:http://abc.axx.loc:8000/abcd.aspx – Andrew

+0

我不是通灵者,这就是为什么我要求你给予更多的细节_... POST是相应编辑的。 –

+0

喂sputnick。会很好,如果你从我的答案中删除你的投票。 至于你的答案 - 端口正则表达式是在错误的地方。 –

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") 

workforme。然而,一些要点:

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

我建议

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

或省略部分与用户登录,只是允许域中@:

/^https?:\/\/[\w.:@]+\/\w+\.\w+$/i 
+0

谢谢Bergi!良好的建议和答案完美的作品! – Andrew

相关问题