正则表达式匹配任何网址字符

时间:2017-04-24 12:56:51

标签: regex

我已经达到了一个规范所说的字段为:

  

任何网址字符

我想通过REGEX验证它。

我搜索了一下,即使我发现这个包含我所需要的每一条信息的SO question都很棒,但我发现如果没有一个问题正是要求正则表达式那么太糟糕了,所以我在这里。

匹配任何网址字符的正确正则表达式是什么?

修改

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

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

那么,这个REGEX是正确的还是详尽无遗的还是我错过了什么?

阅读specification之后,我猜它只是"所有ASCII字符"。

1 个答案:

答案 0 :(得分:1)

请参见Characters section

  

URI由有限的一组字符组成,这些字符包括      数字,字母和一些图形符号。的保留子集      这些字符可用于分隔      URI而其余字符(包括未保留的字符集)      以及那些不用作分隔符的保留字符,分别定义了      组件的识别数据。

尽管有迹象表明仅支持数字,字母和某些符号,但您可能会看到建议的正则表达式来解析Appendix B. Parsing a URI Reference with a Regular Expression处的URI,该URI实际上可能与几乎所有字符都匹配:

  

以下是分解a的正则表达式      格式正确的URI引用进入其组件。

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

您以[\w.~:/?#\[\]@!$&'()*+,;=%-]模式收集的内容过于严格,除非\w能够识别Unicode(URI可以包含任何Unicode字母),否则它可能或多或少为您工作。

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