需要一个处理此URL的正则表达式:

时间:2013-02-18 17:54:16

标签: regex

我有来自Google圈子的网址,但未通过正常的正则表达式进行验证。例如,asp.net提供了一个标准的正则表达式来处理URLS,它是:

"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"

但是当你得到谷歌圈子网址时:

https://plus.google.com/photos/114197249914471021468/albums/5845982797151575009/5845982803176407170?authkey=CKfNzLrhmenraA#photos/114197249914471021468/albums/5845982797151575009/5845982803176407170?authkey=CKfNzLrhmenraA

它无法应付。

我想到了以下表达式:(\?.+)? 这基本上意味着URL后面可以有一个问号,然后是任意类型的任意数量的字符,但这不起作用。

整个表达方式是:

"[Hh][Tt][Tt][Pp]([Ss])?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*(\?.+)?)?"

出于某种原因,这也不适用于复杂的URL。 感谢帮助。

1 个答案:

答案 0 :(得分:0)

为了进行此测试,我添加了锚点^$,转义了/,因为以下是javascript正则表达式文字,更改了&,没有业务,&;,删除了空格并将#添加到第三个字符集,它似乎工作正常:

/^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w.\/?%&;#=-]*)?$/.test( 
    'https://plus.google.com/photos/114197249914471021468/albums/5845982797151575009/5845982803176407170?authkey=CKfNzLrhmenraA#photos/114197249914471021468/albums/5845982797151575009/5845982803176407170?authkey=CKfNzLrhmenraA' )   
// true

我还将-移到了第三个字符集的末尾,因为如果不指定范围,它应该在集合的开头或结尾。

免责声明:我不建议将此作为验证网址的好方法,它只是原始正则表达式的编辑版本,现在适用于此特定情况。