匹配任何URL字符的正则表达式

5

我看到一个规范,其中一个字段被描述为:

任意 URL 字符

我想通过正则表达式在我的端上进行验证。

我搜索了一下,即使我找到了这个很好的SO问题,其中包含我需要的所有信息,但我还是觉得没有专门询问正则表达式的问题,所以我来了。

哪种正则表达式可以匹配任何URL字符?

编辑

从我对规范的理解中,提取了以下正则表达式:

[\w\-.~:/?#\[\]@!$&'()*+,;=%]

那么,这个正则表达式是正确且详尽的吗?还是我漏掉了什么?

阅读规范后,我想它只是“所有ASCII字符”。


1
我猜你已经找到了答案 :) 我只想补充一点,就是确保你的输入中没有其他内容:^[...]*$ - Tamas Rev
是的,实际上在提问之前我已经找到了答案,我发帖是为了如果有其他人寻找同样的东西可以参考。在我的情况下,我想要字符组件并将其与另一个正则表达式组合,但还是谢谢你。 - Jeremy Grand
在这种情况下,您也可以发布自己的答案。Stack Overflow鼓励这种自问自答的帖子。 - Tamas Rev
我实际上发布了我的答案,但它被多次投票否决,并且人们在评论中要求将其删除并仅编辑问题。因此,我编辑了问题(因为我最初发布了问题和答案)。 - Jeremy Grand
1
很抱歉听到这个。这不应该发生。 - Tamas Rev
1
这个标记是不合适的,你应该取消删除你的回答。但是不要在回答中发布问题。 - Thomas Ayoub
1个回答

2

请参见字符部分

URI由一组有限的字符组成,包括数字、字母和一些图形符号。其中的保留字符子集可以用于在URI中分隔语法组件,而其余字符(包括未保留的字符集和不作为分隔符的保留字符)则定义了每个组件的标识数据。

尽管有迹象表明仅支持数字、字母和一些符号,但您可以在附录B.使用正则表达式解析URI引用中看到建议使用的正则表达式来解析URI,它实际上可以匹配几乎所有字符:

以下是将格式良好的URI引用分解为其组件的正则表达式。

 ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
   12            3  4          5       6  7        8 9

你所收集的[\w.~:/?#\[\]@!$&'()*+,;=%-]模式太过严格,除非\w是Unicode感知的(URI可能包含任何Unicode字母),否则它可能对你来说工作得更多或更少。

如果您计划匹配仅ASCII URL,请使用^[\x00-\x7F]+$(任何1个以上的ASCII符号)或^[!-~]+$(仅可见ASCII)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接