在正则表达式中验证专有名称 ( DN ) 代码 JavaScript

Validation of Distinguish Name ( DN ) Code in Regex JavaScript

我想验证 DN 代码,其中

所有段必须按顺序出现:cn=,ou=,o=,o=swift 逗号 (,) 必须分隔所有段。

最多 100 个小写字符

不允许有空格

段数:最少2个,最多10个

段要求

段遵循 BIC 格式验证,但允许 8 个字符。

段由以下字符组成:

至少两个字符。

最多 20 个字符。

字母数字字符:a 到 z(仅限小写), 0 到 9, 和特殊字符“-” 如果段有值,因为只有数字将由最多两位数字组成。

我尝试使用以下正则表达式:

^((CN=([a-zA-Z0-9-,])))?((((?:CN|OU)=[a-zA-Z0-9-,]+, ?)+),)?((o=([a-zA-Z]{4})([a-zA-Z]{2})(([0-9a-zA-Z]{1}) ([0-9a-np-zA-NP-Z]))(|([xX]{3})|)+,?)+)?((o=([swift])+, {1})+)$

但它正在使用以下代码: cn=harsha,ou=金库,ou=金库,o=dazppxxx,o=swift,

但没有

cn=test,ou=金库,ou=金库,o=dazppxxx,o=swift"

也在接受中

cn=test,cn=test,ou=treasury,ou=treasury,o=dazppxxx,o=swift,"无效.

请帮忙!!!

这里尝试添加几个测试字符串来测试您的验证规则:

var strings = [
  'cn=harsha,ou=treasury,ou=treasury,o=dazppxxx,o=swift',
  'cn=test,ou=treasury,ou=treasury,o=dazppxxx,o=swift',
  'cn=test,cn=test,ou=treasury,ou=treasury,o=dazppxxx,o=swift',
  'cn=t1,cn=t2,ou=t3,ou=t4,ou=t5,ou=t6,ou=t7,ou=t8,ou=t9,ou=t10,ou=t11,o=dazppxxx,o=swift',
  'cn=a,ou=b,ou=c,o=dazppxxx,o=swift',
  'cn=more-than-20-characters,ou=treasury,ou=treasury,o=dazppxxx,o=swift',
  'cn=more-than-100-total1,cn=more-than-100-total2,ou=more-than-100-total3,ou=more-than-100-total4,o=dazppxxx,o=swift'
];
var re = /^(?=[^,]+(,[^,]+){1,9}$)(?=.{1,100}$)(cn=([a-z0-9\-]{2,20}|[0-9]{1,2}),)+(ou=([a-z0-9\-]{2,20}|[0-9]{1,2}),)+(o=([a-z0-9\-]{2,20}|[0-9]{1,2}),)+o=swift$/

strings.forEach(function(str) {
  var result = re.test(str);
  console.log(str + '\n  ==> ' + result);
});

控制台输出:

cn=harsha,ou=treasury,ou=treasury,o=dazppxxx,o=swift
  ==> true
cn=test,ou=treasury,ou=treasury,o=dazppxxx,o=swift
  ==> true
cn=test,cn=test,ou=treasury,ou=treasury,o=dazppxxx,o=swift
  ==> true
cn=t1,cn=t2,ou=t3,ou=t4,ou=t5,ou=t6,ou=t7,ou=t8,ou=t9,ou=t10,ou=t11,o=dazppxxx,o=swift
  ==> false
cn=a,ou=b,ou=c,o=dazppxxx,o=swift
  ==> false
cn=more-than-20-characters,ou=treasury,ou=treasury,o=dazppxxx,o=swift
  ==> false
cn=more-than-100-total1,cn=more-than-100-total2,ou=more-than-100-total3,ou=more-than-100-total4,o=dazppxxx,o=swift
  ==> false

解释:

  • 正则表达式以正前瞻开始,以测试 1-9 个逗号,例如2 到 10 段
  • 第二个前瞻测试总共最多 100 个字符
  • 后跟 (cn=([a-z0-9\-]{2,20}|[0-9]{1,2}),)+,这意味着 cn 有 2-20 个字符(小写、数字、破折号),或者最多 2 位数字
  • 后跟 ouo
  • 相同
  • 之后是 o=swift

您声明第三个示例无效。根据您规定的规则,我不明白为什么它违反了您规定的规则