DN地址的正则表达式

时间:2011-02-23 09:31:28

标签: javascript regex

如何在必须遵循条件的javascript中编写正则表达式

  1. DN地址中的所有段都应遵循cn=<name>,ou=<name>,o=<bic8>,o=swift
  2. 序列
  3. 所有细分都应使用,分隔。
  4. DN地址最多应包含100个字符。
  5. 不允许有空格。
  6. DN地址中最少允许2个,最多10个段。
  7. <name>部分必须至少包含2个字符和最多20个字母数字字符。字符应为小写。只允许使用一个特殊字符,即-(Hypen)。
  8. DN地址最多包含2个数字。 <name>部分最多可包含2位数字。
  9. 提前致谢

2 个答案:

答案 0 :(得分:2)

我认为.split()在这种情况下更容易使用。

首先将整个字符串拆分为,,然后将结果数组的每个单独段拆分为=

特别是在一个明确定义的规范中,split足以处理它。

答案 1 :(得分:0)

下面是未经测试的代码,如果它炸毁了你的电脑,请不要怪我:

var parseDn(str)
  var m = /^cn=(.*?),ou=(.*?),o=(.*?),o=swift$/.exec(str);
  if (!m) { return null; } // (a) and (b).
  if (s.length > 100) { return null; } // (c).
  if (/\s/.exec(s)) { return null; } // (d).
  var x = {cn:m[1], ou:m[2], o:m[3]};
  var isValidName = function(s) { return (/^[a-z-]{2,20}$/).exec(s); }
  if (!isValidName(x.cn) || !isValidName(x.ou) || !isValidName(x.o)) {
    return null; // (f).
  }
  var countNumbers = function(s) { return s.replace(/\D/g, "").length; }
  if (countNumbers(x.cn)>2 || countNumbers(x.ou)>2 || countNumbers(x.o)>2) {
    return null; // (g).
  }
  return x; // => {"cn":"name", "ou":"name", "o":"bic8"}
}

请注意,(e)和关于“段”的一些要点完全没有检查,因为描述含糊不清。但这应该让你开始......