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

2024-01-03

我想验证通过 API 输入的互联网类型。

你能帮忙写一个正则表达式来匹配吗?

下面的示例类型来自http://en.wikipedia.org/wiki/Internet_media_type 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

必须符合标准:

type / media type name [+suffix]

我最近需要比现有答案更严格地验证媒体类型。这是我根据交叉点想到的RFC 2045 第 5.1 节的语法 https://www.rfc-editor.org/rfc/rfc2045#section-5.1 and RFC 7231 第 3.1.1.1 节 https://www.rfc-editor.org/rfc/rfc7231#section-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 + ")*)";

这最终会导致一个相当可怕的结果

"(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!#$%&'*+.^_`|~-]+|\"(?:[^\"\\\\]|\\.)*\"))*)"

它捕获类型、子类型和参数,或者只是

"(application|audio|font|example|image|message|model|multipart|text|video|x-(?:[0-9A-Za-z!#$%&'*+.^_`|~-]+))/([0-9A-Za-z!#$%&'*+.^_`|~-]+)"

省略参数。请注意,通过允许任何token for type(如 RFC 7231 所做的那样)而不是限制为“应用程序”、“音频”等。

在实践中,您可能需要额外限制输入IANA 注册媒体类型 https://www.iana.org/assignments/media-types/media-types.xhtml or mailcap https://manpages.debian.org/stretch/mime-support/mailcap.5.en.html或根据预期用途适合您的应用程序的特定类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式来匹配和验证互联网媒体类型? 的相关文章

随机推荐

  • 将一个结构深度复制到另一个结构

    我有一个struct其中包含字符串和指针 是否有任何库函数可用于进行深度复制struct进入另一个 我不想逐个字段进行复制 因为我拥有的结构非常大 glib 有没有什么函数可以做到这一点 不可以 通用函数无法知道结构体的结构 即仅在编译时可
  • 如何让 HTML 在另一个窗口或选项卡中打开超链接?

    这是 HTML 中的超链接行 a href http www starfall com Starfall a 因此 如果我单击 Starfall 我的浏览器 我使用的是 FireFox 将带我进入新页面 并且窗口的内容将发生变化 我想知道
  • Twitter Bootstrap 选项卡:内容窗格中的链接不起作用

    我这里有一个工作选项卡实例 并准备了一个 jsfiddle 不知何故 选项卡在这里无法正常工作 但链接问题仍然存在 http jsfiddle net Gyrga 6 http jsfiddle net Gyrga 6 选项卡窗格中的链接不
  • 二进制序列 x 位长的所有排列

    我想找到一种干净而聪明的方法 在 python 中 来查找 1 和 0 x 字符长的字符串的所有排列 理想情况下 这会很快并且不需要进行太多迭代 所以 对于 x 1 我想要 0 1 x 2 00 01 10 11 etc 现在我有这个 它很
  • 将一列拆分为多行

    谁能告诉我如何实现这个目标 在某些情况下 我的表中的列包含逗号分隔的值 如果是这样 我需要为这些值创建新行 此外 作为一个例子 一个表包含 1 行 4 列第 2 栏 第 3 栏 Col4 具有以下值 A 乙 C 分别为1 2 3 因此 Co
  • 用于重命名文件夹中的文件并再次命名的批处理文件

    恐怕这是一个有点过时的问题 但这里是 我有一个程序可以按顺序生成一些 RAW 文件 例如 示例 1 RAW示例 2 RAW 然后根据需要向数字添加额外的有效数字 例如 示例 10 RAW示例 200 RAW 我需要将这些文件名转换为数字 以
  • 在地图期间获取前一个元素的功能方法

    我有一个数组map超过 我需要将当前元素与前一个元素进行比较 我通过比较当前元素与前一个元素是否相同来检测id并根据这种情况做一些不同的事情 有没有一种纯粹的函数式方法可以在不进行索引数学的情况下做到这一点 items map item i
  • 如何在 SymPy 中创建一个参数本身就是随机变量的随机变量?

    我有一个随机变量 Y 其分布为泊松分布 参数本身就是随机变量 X 其分布为泊松分布 参数为 10 如何使用 SymPy 自动计算 X 和 Y 之间的协方差 代码 from sympy stats import x1 Poisson x1 3
  • 开玩笑:测试 window.location.reload

    我如何编写一个测试来确保该方法reloadFn实际上会重新加载窗口吗 我发现这个资源 https gist github com remarkablemark 5cb571a13a6635ab89cf2bb47dc004a3但我不清楚当窗口
  • 如何处理 JavaScript 中 setTimeout 的错误?

    简单的问题关于try catch对于函数在setTimeout try setTimeout function throw new Error error 300 catch e console log eeee console log e
  • 如何在 ListView 顶部插入小部件?

    简要说明 在我的所有代码示例中 您都会看到类似的内容material Widget而不是仅仅Widget 这是因为我喜欢这样命名我的导入 import package flutter material dart as material 我的
  • Fragment 切换期间 onResume() 的替代方案

    onResume 当我们在片段之间切换多次时 不会调用该方法 那么 有没有更好的方法来处理恢复操作呢 代码如下 Step 1 创建接口 public interface YourFragmentInterface void fragment
  • Angular4中的ActivatedRoute和ActivatedRouteSnapshot有什么区别

    有什么区别ActivatedRouteSnapshot and ActivatedRoute在 Angular 4 中 我的理解是ActivatedRouteSnapshot是一个孩子ActivatedRoute 意思是ActivatedR
  • 扩展中的延迟加载属性 (Swift)

    我知道 swift 不允许在扩展中声明存储的属性 出于同样的原因 延迟加载的属性也是被禁止的 我知道计算属性是一种选择 但我的任务应该只执行一次 是否有任何黑客 替代 被忽视的方法来模仿扩展中的惰性变量 Thanks 如果你不需要参考sel
  • requestWindowFeature(Window.FEATURE_NO_TITLE);给出例外

    import android content pm ActivityInfo import android os Bundle import android preference ListPreference import android
  • 只有我吗?我发现与 XPath 相比,LINQ to XML 有点麻烦

    我是一名 C 程序员 因此我无法利用 VB 中炫酷的 XML 语法 Dim itemList1 From item In rss
  • 如何验证 reCAPTCHA V2 Java (Servlet)

    这是一个问答风格的帖子 我将同时发布问题和答案 主要原因是我花了相当多的时间寻找验证 recaptcha V2 的最简单方法 因此 我将分享我的知识 以避免进一步浪费开发人员的时间 如何做一个服务器端验证谷歌的验证码 V2 or 隐形验证码
  • Docker构建npm安装错误网络超时

    我尝试将映像构建到节点应用程序 但是当我执行 docker build 时显示运行 npm install 时出现错误 npm 错误 网络超时时间 https registry npmjs org cookie cookie 0 4 0 t
  • 如何并行化复杂的 for 循环

    我有一个复杂的for循环 其中包含循环中对多个记录的多个操作 循环看起来像这样 for i j k in zip is js ks declare multiple lists like a b if i for items in i va
  • 正则表达式来匹配和验证互联网媒体类型?

    我想验证通过 API 输入的互联网类型 你能帮忙写一个正则表达式来匹配吗 下面的示例类型来自http en wikipedia org wiki Internet media type http en wikipedia org wiki