DN 的 JavaScript 正则表达式

2023-11-25

我想要一个正则表达式来验证所有类型的可能 DN

我创建了一个,但效果不太好。

/([A-z0-9=]{1}[A-z0-9]{1})*[,??]/ and 其他一些改变它,但徒劳无功。

可能的 DN 可以是

CN=abcd,CN=abcd,O=abcd,C=us
CN=abcd0520,CN=users,O=abcd,C=us
C=us

etc

我最近需要这个,所以我创建了一个完全遵循 LDAPv3 可分辨名称语法的一个:RFC-2253.

属性类型

attributeType 可以用两种方式表示。以 alpha 开头的字母数字字符串,使用以下方法进行验证:

[A-Za-z][\w-]*

或者它可以是一个 OID,使用以下方法进行验证:

\d+(?:\.\d+)*

因此 attributeType 验证使用:

[A-Za-z][\w-]*|\d+(?:\.\d+)*

属性值

attributeValue 可以用 3 种方式表示。十六进制字符串,它是带有前导的十六进制对序列#。十六进制字符串使用以下方式进行验证:

#(?:[\dA-Fa-f]{2})+

或者转义字符串;每个非特殊字符均按“原样”表示(使用[^,=\+<>#;\\"])。特殊字符可以用前导来表示\(验证使用\\[,=\+<>#;\\"])。最后,任何字符都可以表示为带有前导的十六进制对\(验证使用\\[\dA-Fa-f]{2})。转义字符串使用以下方法进行验证:

(?:[^,=\+<>#;\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*

或带引号的字符串;该值的开头和结尾为",并且可以包含任何转义字符,除了\ and "。此外,可以使用上面转义字符串中的任何方法。带引号的字符串使用以下方式进行验证:

"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*"

所有组合起来, attributeValue 使用以下方式进行验证:

#(?:[\dA-Fa-f]{2})+|(?:[^,=\+<>#;\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*|"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*"

名称组成部分

BNF 中的名称组件是:

name-component = attributeTypeAndValue *("+" attributeTypeAndValue)
attributeTypeAndValue = attributeType "=" attributeValue

在正则表达式中是:

(?#attributeType)=(?#attributeValue)(?:\+(?#attributeType)=(?#attributeValue))*

更换(?#attributeType) and (?#attributeValue)具有上述值的占位符为我们提供:

(?:[A-Za-z][\w-]*|\d+(?:\.\d+)*)=(?:#(?:[\dA-Fa-f]{2})+|(?:[^,=\+<>#;\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*|"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*")(?:\+(?:[A-Za-z][\w-]*|\d+(?:\.\d+)*)=(?:#(?:[\dA-Fa-f]{2})+|(?:[^,=\+<>#;\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*|"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*"))*

它验证单个名称组件。

专有名称

最后,专有名称的 BNF 为:

name-component *("," name-component)

在正则表达式中是:

(?#name-component)(?:,(?#name-component))*

将 (?#name-component) 占位符替换为上面的值可以得到:

^(?:[A-Za-z][\w-]*|\d+(?:\.\d+)*)=(?:#(?:[\dA-Fa-f]{2})+|(?:[^,=\+<>#;\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*|"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*")(?:\+(?:[A-Za-z][\w-]*|\d+(?:\.\d+)*)=(?:#(?:[\dA-Fa-f]{2})+|(?:[^,=\+<>#;\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*|"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*"))*(?:,(?:[A-Za-z][\w-]*|\d+(?:\.\d+)*)=(?:#(?:[\dA-Fa-f]{2})+|(?:[^,=\+<>#;\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*|"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*")(?:\+(?:[A-Za-z][\w-]*|\d+(?:\.\d+)*)=(?:#(?:[\dA-Fa-f]{2})+|(?:[^,=\+<>#;\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*|"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\dA-Fa-f]{2})*"))*)*$

在这里测试一下

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

DN 的 JavaScript 正则表达式 的相关文章

随机推荐

  • 如何写一个解释器?

    我决定用 Ruby 编写一个小型解释器作为我的下一个项目 我需要什么知识 技能才能成功 我还没有决定要解释的语言 但我正在寻找一种不是玩具语言 但相对容易编写解释器的语言 提前致谢 你至少必须学习 词法分析 将字符分组为标记 解析 将标记分
  • Bootstrap 缩略图中的垂直居中约束图像

    Using 推特引导程序 我正在尝试创建一个水平滚动的系列缩略图它允许在显示缩略图的行中使用滚动条 如下所示 使用以下 HTML 我可以完成大部分工作 div class row Hello there div div class row
  • fgets 实现 (K&R)

    我是编程新手 从 Objective C 开始 但决定在进一步发展之前先回到基础知识 我花了一些时间在 C 上 并且正在努力克服指针混乱 我的问题是关于 K R 所说的 fgets 是如何实现的 第 165 页 第二版 下面的代码直接来自文
  • 在片段中运行时更改方向时更改布局,而无需重新创建视图

    我尝试开发第一个应用程序 从网络下载图像并在网格视图中显示它们 gridview 是主 Activity 的一个片段 下载过程是通过 onCreate 函数中的 AsyncTask 完成的 为了在改变方向时不再次下载图像 我设置了andro
  • XML 数据类型方法“值”必须是字符串文字[重复]

    这个问题在这里已经有答案了 如何更改我的查询以免发生此错误 XML 数据类型方法 值 必须是字符串文字 T SQL代码 Declare Count Int 1 While count lt j Begin insert into mytab
  • 使用Google Closure编译器[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Google Closure Compiler 编译 jQuery 我正在使用 jQuery 并且我的所有 JS 代码都在 application js 文件中 当我使用 Google Clos
  • 在 Android 上从 GPS 提供商获取“粗略”位置

    我的应用程序只需要非常粗略的位置数据 因此我最初将清单权限设置为ACCESS COARSE LOCATION 并设置一个位置侦听器NETWORK PROVIDER 这为我提供了我所需要的粗略位置估计 但前提是 Google 定位服务已打开
  • 论坛如何向您显示未读主题?

    我有用 php mysql 编码的用户讨论论坛 我想知道知名论坛如何向您显示哪些主题中有新帖子 通常是通过更改线程旁边的图标图像而不使用任何资源 The simplest方法是跟踪某人上次登录的时间 当他们回来访问时 从那时起更新的所有内容
  • iOS 13 `withTintColor` 不遵守我分配的颜色

    我发现新的 iOS 13 UIImage 属性的行为withTintColor renderingMode 难以理解 它的用途是什么 它与图像出现的上下文的色调颜色有何关系 例如 let im UIImage systemName circ
  • 字符串集??!​​!

    您熟悉这个块 Var mySet Set Of Char C Char begin mySet a b c If C In mySet Then ShowMessage Exists end 有什么办法可以申报吗Set Of STRING
  • 为什么我不能在 IE7 中使用相对 URL?

    我已经用谷歌搜索了一段时间 似乎找不到这个问题的答案 我的问题如下 对于我的 jquery 我需要我的链接是相对的而不是绝对的 我的 PHP 设置为返回相对 url 一切正常 直到我在 IE7 中测试它 由于某种原因 IE7 不断将我的相对
  • 如何删除名称以“-”开头的分支

    在尝试创建跟踪分支时 我设法创建了一个名为 t 的本地分支 我无法删除分支 因为分支名称也是一个参数 这是在 Windows 机器上 git branch D t fatal branch name required 逃避也无济于事 git
  • jQuery和prototype.js冲突,如何保持jQuery为$?

    所以我正在开发一个同时使用 jQuery 和prototype js 的网站 但是它们是冲突的 我进行了相当多的研究 发现人们解决这个问题的唯一方法是使用
  • 无状态类仿函数什么时候可以代替 C 风格函数?

    我在 SO 上找到了一些很好的函子示例 例如this一 所有令人信服的例子似乎都在定义的类中使用了状态operator 我在一本书中遇到一个例子 它定义了没有状态的函数调用运算符 我不禁觉得这是一种尴尬的用法 并且普通风格的函数指针会比使用
  • LocationManager 返回旧的缓存“Wifi”位置和当前时间戳

    我正在尝试获取当前位置 为此 我实现了一个 LocationListener 并将其注册到网络和 GPS 提供商 locationManager requestLocationUpdates LocationManager GPS PROV
  • 将 Objective-C 应用程序链接到 C++ 静态库

    我正在尝试使用 Xcode 构建一个链接到静态 C 库的 Objective C 桌面应用程序 我正在使用苹果的 clang 编译器 我收到以下链接器错误 Apple clang version 3 0 tags Apple clang 2
  • 使用 GroovyShell 从 Gradle 运行 Groovy 脚本:线程“main”中出现异常 java.lang.NoClassDefFoundError:org/apache/commons/cli/ParseException

    我想从我的 Gradle 构建脚本运行一个 groovy 命令行脚本 我在 Gradle 脚本中使用此代码 def groovyShell new GroovyShell groovyShell run file script groovy
  • 覆盖电子

    我想知道是否可以将电子制作的应用程序覆盖在游戏上 本质上类似于游戏中蒸汽覆盖的方式 我想要这个 因为我们已经制作了一个计时器网络应用程序来计时任务 并正在讨论如果可能的话将其作为覆盖层 为游戏中重复发生的某些事件计时 我不知道这是否可以实现
  • cassandra将数据从一个列族复制到另一个列族

    我是卡桑德拉的新手 我需要将数据从一个columnFamily复制到cassandra中同一键空间中的另一个columnFamily 比如说 我们在键空间K1中有一个A1columnFamily 所以现在我需要在同一键空间K1中创建colu
  • DN 的 JavaScript 正则表达式

    我想要一个正则表达式来验证所有类型的可能 DN 我创建了一个 但效果不太好 A z0 9 1 A z0 9 1 and 其他一些改变它 但徒劳无功 可能的 DN 可以是 CN abcd CN abcd O abcd C us CN abcd