我已经达到了一个规范所说的字段为:
任何网址字符
我想通过REGEX验证它。
我搜索了一下,即使我发现这个包含我所需要的每一条信息的SO question都很棒,但我发现如果没有一个问题正是要求正则表达式那么太糟糕了,所以我在这里。
匹配任何网址字符的正确正则表达式是什么?
修改
我从规范中理解的内容中提取了以下正则表达式:
[\w\-.~:/?#\[\]@!$&'()*+,;=%]
那么,这个REGEX是正确的还是详尽无遗的还是我错过了什么?
阅读specification之后,我猜它只是"所有ASCII字符"。
答案 0 :(得分:1)
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)。