验证功能问题

时间:2010-10-29 05:53:41

标签: java

您好 我无法得到正确的验证。我认为此代码中存在一些错误,所以任何人都可以帮我解决这个问题。

 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;
    }
}

我正在使用此代码验证费用,其中我使用正则表达式作为[0-9] +。 这段代码我在一个常用函数中使用它。实际上验证调用是在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;
} 

我认为没有错误,但我对这个功能有疑问。我面临一个问题,比如如果我给这个费用编号也是它的验证。请帮助我

3 个答案:

答案 0 :(得分:5)

目前它允许null或“”的值被认为是有效的 - 这是故意的吗?

请注意,您可以更简单地重写当前代码:

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

现在,如果您希望null / empty计为无效,我会将其重写为:

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

答案 1 :(得分:1)

修剪你的字符串然后传递给它。

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

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

答案 2 :(得分:0)

我建议您使用commons-lang StringUtils类,重写您的验证方法

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);
    }
}