gpt4 book ai didi

DN 的 javascript 正则表达式

转载 作者:数据小太阳 更新时间:2023-10-29 04:32:43 25 4
gpt4 key购买 nike

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

我创造了一个,但它不是很好。

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

可能的 DN 可以是

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

etc

最佳答案

我最近有这个需求,所以我在 RFC-2253 创建了一个完全遵循 LDAPv3 专有名称语法的.

属性类型

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

[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})*

或者一个带引号的字符串;该值以 " 开头和结尾, 并且可以包含除 \ 之外的任何未转义字符和 " .此外,可以使用上述转义字符串中的任何方法。引号字符串验证使用:

"(?:[^\\"]|\\[,=\+<>#;\\"]|\\[\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

在 RegEx 中是:

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

替换 (?#attributeType)(?#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)

在 RegEx 中是:

(?#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})*"))*)*$

Test it here

关于DN 的 javascript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9289357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com