2010-10-29 41 views
2

你好 我不能得到正確的驗證。我認爲這個代碼有一些錯誤,所以任何人都可以請幫我解決這個問題。驗證功能問題

public static boolean validateFee(String value) { 

     boolean isvalid = true; 
     try { 
      int fee = 0; 
      if (value != null && !value.isEmpty()) { 
       fee = Integer.parseInt(value); 
      } 
     } catch (NumberFormatException ne) { 
      // ne.printStackTrace(); 
      isvalid = false; 
      return isvalid; 

     } 
     return isvalid; 
    } 
} 

我是actaully使用此代碼驗證費用,其中我使用正則表達式[0-9] +。 此代碼IM在一個共同的function.Actually驗證調用使用它在Servlet進行如下:

private Boolean validateFee(HttpSession session, PropertiesHandler props, String number) { 
    Boolean isvalid = true; 
    HashMap hashMap = new LinkedHashMap(); 
    number = ApplicationConstants.FEE_PATTERN; 
    if (!Validation.validateFee(number)) { 
     isvalid = false; 
     hashMap.put("time", props.getText("error.fee.invalid.type")); 
    } 
    session.setAttribute("errorMessage", hashMap); 
    System.out.println("Map size " + hashMap.size()); 
    logger.info("Exit validateTIme"); return isvalid; 
} 

我覺得這是在沒有任何錯誤,但我在這function.I無疑正在面臨問題,如果我給費用的號碼也採取驗證。請幫助我出

+0

你有哪些失敗的任何投入? – MAK 2010-10-29 06:02:23

回答

5

目前它允許空值或「」計算爲有效 - 是故意的?

注意,目前的代碼可以更簡單地改寫:

public static boolean validateFee(String value) { 
    try { 
     if (value != null && !value.isEmpty()) { 
      Integer.parseInt(value); 
     } 
     return true; 
    } catch (NumberFormatException ne) { 
     return false; 
    } 
} 

現在如果你想空/空算作無效,我把它改寫爲:

public static boolean validateFee(String value) { 
    if (value == null || value.isEmpty()) { 
     return false; 
    } 
    try { 
     Integer.parseInt(value); 
     return true; 
    } catch (NumberFormatException ne) { 
     return false; 
    } 
} 
+0

我使用了這段代碼,但仍然無法得到答案。下面的代碼是我對費用函數的驗證。 – yopirates 2010-10-29 06:10:14

+0

當我使用我的程序時,我沒有使用費用 – yopirates 2010-10-29 06:16:48

+1

@yopirates:*什麼*答案?你還沒有說過什麼是錯的。如果你可以舉一個例子,說明它給出了錯誤的答案,那會讓你更容易幫助你。 – 2010-10-29 06:17:02

0

我建議您使用公共琅StringUtils類,你的validate方法是重新編寫

public static boolean validateFee(String value) { 
    return StringUtils.isNumeric(StringUtils.trimToNull(value)); 
} 

你完全刪除ApplicationConstants.FEE_PATTERN。您目前面臨的問題是您的servlet用ApplicationConstants.FEE_PATTERN覆蓋其輸入值。您的servlet方法被重寫

private Boolean validateFee(HttpSession session, PropertiesHandler props, String number) { 
    final Boolean valid = Validation.validateFee(number); 
    if (!valid) { 
     final HashMap hashMap = new LinkedHashMap(); 
     hashMap.put("time", props.getText("error.fee.invalid.type")); 
     session.setAttribute("errorMessage", hashMap); 
    } 
} 
+0

我導入了StringUtils,但我得到錯誤在trimToNull – yopirates 2010-10-29 06:38:33

+0

什麼是錯誤?你在使用commons-lang 2.5嗎? – 2010-10-29 06:40:45

+0

如果可能的話,你能否改變我的代碼? – yopirates 2010-10-29 06:41:13

1

修剪您的字符串,然後傳遞給它。

StringUtils.isNumeric(StringUtils.trimToNull(fees)); 

您可以直接使用StringUtils.isNumeric()

+0

甚至可以匹配空字符串。 – aioobe 2010-10-29 06:16:06

+0

@aioobe謝謝,更新了答案 – 2010-10-29 06:18:12

+0

'StringUtils.trimToNull(費用)'會更好 – 2010-10-29 06:26:00