正则表达式匹配和验证互联网媒体类型?

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)

谢谢

Kev*_*oid 7

我最近需要比现有答案更严格地验证媒体类型。这是我根据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)

省略参数。请注意,通过允许任何tokenfor type(如 RFC 7231 所做的那样)而不是限制为“应用程序”、“音频”等,可以使这些更向前兼容(并且不那么严格)。

在实践中,您可能希望根据预期用途将输入额外限制为IANA 注册媒体类型mailcap或适合您的应用程序的特定类型。


Luc*_*ski 5

这真的很简单:

\w+/[-+.\w]+

演示:http://regex101.com/r/oH5bS7/1

如果你想验证最多有一个+

\w+/[-.\w]+(?:\+[-.\w]+)?