2009-11-16 39 views
2

我寫來處理正則表達式驗證在AX2009的方法。問題在於它總是返回false,無論表達式或輸入字符串是什麼。返回沒有錯誤,只是'錯'心介意看看?我可能錯過了一些簡單的東西。Axapta的校驗類

該帖子已被更新,以包括校正方法,沒有錯誤,那麼你可以剪切和粘貼代碼在你的項目中使用。 BP符合並準備使用。 - 享受

static boolean validateMe(str regexFilter, str _testString) 
{ 
    System.Text.RegularExpressions.Match regExMatch; 
    boolean retVal; 
    str regExpression; 
    ; 

    //See if any of the static expressions were selected 
    switch (regexFilter) 
    { 
     case 'integer' : 
      regExpression = '^\\d+$'; 
      break; 
     case 'rgbcolor' : 
      regExpression = '^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\,([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\,([01]?\\d\\d?|2[0-4]\\d|25[0-5])$'; 
      break; 
     case 'number' : 
      regExpression = '^(\\d+\\.?\\d*|\\d*\\.?\\d+)$'; 
      break; 
     case 'email' : 
      regExpression = '^([\\w-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([\\w-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$'; 
      break; 
     case 'phone' : 
      regExpression = '^(\\()?(\\d{3})(\\)|-)?([0-9]{3})(-)?([0-9]{4}|[0-9]{4})$'; 
      break; 
     case 'nopunctationphone' : 
      regExpression = '^\\d{10}$'; 
      break; 
     default : 
      //No static expression matched, use the passed-in value 
      regExpression = regexFilter; 
    } 

    //see if the string matches 
    if (_testString != '') 
    { 
     //see if string matches expression; validation is good 
     regExMatch = System.Text.RegularExpressions.Regex::Match(_testString, regExpression); 
     retVal = regExMatch.get_Success(); 
    } 
    else 
    { 
     //string does NOT match expression; validation fails 
     retVal = false; 
    } 

    return retVal; 
} 

回答

2

您已經交換了變數應該是:

regEx = new System.Text.RegularExpressions.Regex(regExpression); 
+0

Doh!不夠感謝你。我盯着那個代碼幾個小時。有趣的是,問題越簡單,找到它就越困難。 ; ) – Brad 2009-11-20 16:24:39

0

難道說你需要逃避字符串內的反斜線?

regExpression = '^\\d*$'; 

+0

不幸的是,已經試過了。 FYI:電子郵件正則表達式是由類複製/粘貼> SysEmailDistributor>爲EmailValidator。它甚至會爲'。*'返回false,所以我認爲除了表達式之外可能還有些問題。 – Brad 2009-11-17 17:45:29

+0

蒂姆是正確的,你需要像他那樣逃跑的晃動,或者你可以做這樣的: regExpression = @「^ \ d * $」; – 2009-11-18 15:10:30