Pet*_*rne 4 regex media validation
我想验证通过我的 API 输入的互联网类型。
你能帮忙写一个正则表达式来匹配吗?
以下示例类型来自http://en.wikipedia.org/wiki/Internet_media_type
application/atom+xml
application/EDI-X12
application/xml-dtd
application/zip
application/vnd.openxmlformats-officedocument.presentationml.presentation
video/quicktime
Run Code Online (Sandbox Code Playgroud)
必须符合标准:
type / media type name [+suffix]
Run Code Online (Sandbox Code Playgroud)
谢谢
我最近需要比现有答案更严格地验证媒体类型。这是我根据RFC 2045 第 5.1 节和RFC 7231 第 3.1.1.1节中的语法的交集得出的结论({}
除了参数之间不允许出现标记和空格)。对于具有(?:)
非捕获组的类 C 语言:
ows = "[ \t]*";
token = "[0-9A-Za-z!#$%&'*+.^_`|~-]+";
quotedString = "\"(?:[^\"\\\\]|\\.)*\"";
type = "(application|audio|font|example|image|message|model|multipart|text|video|x-(?:" + token + "))";
parameter = ";" + ows + token + "=" + "(?:" + token + "|" + quotedString + ")";
mediaType = type + "/" + "(" + token + ")((?:" + ows + parameter + ")*)";
Run Code Online (Sandbox Code Playgroud)
这以一个相当可怕的结束
"(application|audio|font|example|image|message|model|multipart|text|video|x-(?:[0-9A-Za-z!#$%&'*+.^_`|~-]+))/([0-9A-Za-z!#$%&'*+.^_`|~-]+)((?:[ \t]*;[ \t]*[0-9A-Za-z!#$%&'*+.^_`|~-]+=(?:[0-9A-Za-z!#$%&'*+.^_`|~-]+|\"(?:[^\"\\\\]|\\.)*\"))*)"
Run Code Online (Sandbox Code Playgroud)
它捕获类型、子类型和参数,或者只是
"(application|audio|font|example|image|message|model|multipart|text|video|x-(?:[0-9A-Za-z!#$%&'*+.^_`|~-]+))/([0-9A-Za-z!#$%&'*+.^_`|~-]+)"
Run Code Online (Sandbox Code Playgroud)
省略参数。请注意,通过允许任何token
for type
(如 RFC 7231 所做的那样)而不是限制为“应用程序”、“音频”等,可以使这些更向前兼容(并且不那么严格)。
在实践中,您可能希望根据预期用途将输入额外限制为IANA 注册媒体类型或mailcap或适合您的应用程序的特定类型。
归档时间: |
|
查看次数: |
2736 次 |
最近记录: |