-1

我有一个来自谷歌圈子的 URL,它没有得到普通正则表达式的验证。例如,asp.net 提供了一个标准的正则表达式来处理 URL,即:

"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。帮助表示赞赏。

4

1 回答 1

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

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

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

于 2013-02-18T18:46:18.483 回答