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

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(使用前将#替换为@)

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

  • 如何使用 PHP preg_replace 链接 Twitter 用户名?

    我想搜索我的 Twitter 状态对象的文本属性并将 username 替换为 a href username a 到目前为止我尝试过的看起来像这样 pattern 1 a zA Z0 9 replace a href 1 2 a new
  • Groovy:验证 JSON 字符串

    我需要检查 Groovy 中的字符串是否为有效的 JSON 我的第一个想法就是把它发送出去new JsonSlurper parseText myString 并且 如果没有例外 就假设它是正确的 然而 我发现 Groovy 很乐意接受尾随
  • 设计 DFA 接受可被数字“n”整除的二进制字符串

    我需要学习如何设计一个 DFA 使得给定任何数字 n 它接受二进制字符串 0 1 其十进制等效数可被 n 整除 不同的 n 会有不同的 DFA 但是有人可以给出一个基本方法 我应该遵循该方法来处理任何数字 0 下面我写了一个答案n等于 5
  • 你把你的验证放在 asp.net mvc 3 的哪里?

    ASP NET MVC 中一种常见的推荐做法是您不应该将您的商业模式发送到您的视图中 http lostechies com jimmybogard 2009 06 30 how we do mvc view models 相反 您应该创建
  • 包含某些特殊字符(排除所有其他字符)的密码的正则表达式

    我必须为指定为的密码提供数据注释正则表达式 min 8 chars min 1 upper min 1 lower min 1 numeric min 1 special char which can ONLY be one of the
  • 如何连接行并添加分隔符?

    命令J连接线 命令gJ连接线删除空格 是否还有连接行的命令 在行之间添加分隔符 Example Input text other text more text text 我想做的事 选择这4行 如果开始和 或 EOL 处有空格 请将其删除
  • CSS 中 media="screen" 是什么意思?

    下面的 CSS 代码中 media screen 是什么意思
  • 如何从 Python 列表中删除日期

    我有一个标记化文本列表 list of words 看起来像这样 list of words 08 20 2014 10 04 27 pm complet vendor per mfg recommend 08 20 2014 10 04
  • 重定向 url 的正则表达式

    是否有一个正则表达式可以匹配这些 url 重定向情况 我已经尝试了几个小时了 我得到的最接近的是 c p 但它不匹配 p or c https regex101 com r ezb0jX 1 https regex101 com r ezb
  • 阻止表单 POSTing,直到 javascript 代码得到满足

    每当我点击提交按钮时它就会触发alert empty username 但直接引导我去checklogin php 我怎样才能避免这种情况并让它保留在页面上 除非该字段不为空 function RequiredFields var user
  • 域驱动设计中输入验证应该放在哪里?

    我想知道我们到底应该在哪里放置输入验证 想象一下 API 调用发送输入以应用用户的空闲时间 在服务层注入验证类并在服务内部调用验证方法是否正确 或者最好将其放在基础设施层甚至领域模型中 我只是想看看在域驱动设计方法中实现 API 输入验证的
  • 仅在大括号外的空格上分割字符串

    我是正则表达式新手 我需要一些帮助 我阅读了一些与此问题类似的主题 但我不知道如何解决它 我需要在不在一对大括号内的每个空格上分割一个字符串 大括号外的连续空格应被视为单个空格 TEST test test test test test t
  • 使用解析将 ** 运算符更改为幂函数?

    我的要求是将 运算符更改为幂函数 例如 1 Input B 2 Output power B 2 2 B 2 T 2 X Output power B 2 我写了下面的正则表达式来解决这个问题 rx r a zA Z0 9 a zA Z0
  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 文件名的正则表达式模式

    如果文件名符合以下条件 用户可以将文件放入服务器 它必须以 abc 开头 然后是一个点和一个数字 Valid file names abc 2344 abc 111 Invalid abcd 11 abc ab12 正则表达式是什么 我不能
  • 在Python中检测re(regexp)对象

    我想知道什么是正确的 pythonic 向后和向前兼容的方法如何检查对象是否已编译re object isinstance方法不能轻易使用 而生成的对象声称是 sre SRE Pattern object gt gt gt import r
  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • MVC 模式中的验证层

    验证模型将使用的数据的最佳位置在哪里 例如 考虑登记表 我们有一些来自注册表的数据 那么验证这些数据的最佳位置在哪里 我们应该通过 if 语句或特殊的验证器类来检查每个数据 这意味着大量的编码 所以我想了解在哪里可以做到这一点 在控制器中
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru

随机推荐

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

    我有一个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