在正则表达式中验证专有名称 ( 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 位数字
- 后跟
ou
和 o
相同
- 之后是
o=swift
您声明第三个示例无效。根据您规定的规则,我不明白为什么它违反了您规定的规则
我想验证 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 位数字 - 后跟
ou
和o
相同
- 之后是
o=swift
您声明第三个示例无效。根据您规定的规则,我不明白为什么它违反了您规定的规则