您好 我无法得到正确的验证。我认为此代码中存在一些错误,所以任何人都可以帮我解决这个问题。
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;
}
我认为没有错误,但我对这个功能有疑问。我面临一个问题,比如如果我给这个费用编号也是它的验证。请帮助我
答案 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)
答案 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);
}
}