2011-02-23 54 views
1

如何使用JavaScript編寫的正則表達式必須遵循的條件正則表達式

  1. 在DN地址的所有部分應遵循的順序cn=<name>,ou=<name>,o=<bic8>,o=swift
  2. 各方面應與,分開。
  3. DN地址應該有最多100個字符。
  4. 不允許有空間。
  5. DN地址中最多允許2個,最多10個分段。
  6. <name>部分必須包含最少2個字符和最多20個字母數字字符。字符應該是小寫。只允許使用一個特殊字符,即-(Hypen)。
  7. DN地址將有最多2個數字。 <name>部分最多可以包含2位數字。

在此先感謝

+0

你應該考慮自己解析,而不是調用正則表達式。 – jAndy 2011-02-23 09:33:46

+0

你能否改寫這個問題來說明你在編寫正則表達式時遇到什麼問題? – maerics 2011-02-23 09:36:51

+0

如何驗證逗號分隔文本和正則表達式如何驗證最小長度和最大長度 – Aaaaa 2011-02-23 09:38:26

回答

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)和一些關於「段」的點是完全選中,因爲描述是含糊。但這應該讓你開始...

+0

謝謝你soo多 – Aaaaa 2011-02-24 05:38:06

+0

嗨,在X.cn中它只取一個值就是任何其他的值,這樣它就會取所有的cn值輸入多個 – Aaaaa 2011-02-24 05:54:23

2

我覺得.split()是一個更容易在這種情況下使用。

首先拆分,的整個字符串,然後拆分=的結果數組的每個單獨的段。

特別是在一個明確定義的規範中,split已經足夠處理它了。