保留最多两位小数的百分比正则表达式: /^d+.?d{0,2}%$/
44.5% 44.66% 0.3% 5% 都正确 53 33.444% -5.66%都错误
有且仅保留两位小数的百分比正则表达式: /^d+.?d{2}%$/
44.66%正确 55 0.3% 5% 33.444% -5.66%都错误
Js: /^d+.?d{0,2}%$/
java : ^\d+\.?\d{0,2}%$
function IsPercent(){
var str = "0.47%";
alert(str);
if(str.length!=0){
alert(1);
var reg = /^d+.?d{2}%$/;
var r = str.match(reg);
alert(r);
if(r==null)
alert('对不起,您输入的百分比格式不正确!'); //请将“日期”改成你需要验证的属性名称!
}
}
excel校验器
写入excel的是百分比,可是经过代码解析读出来就变成了小数,插入数据库需要转成百分比,所以在校验之后如果符合四位小数就设置成百分比
保留四位的小数正则表达式:^\d+\.?\d{4}$
/**
* @author mashunran 功能: 保留有且仅有两位小数的百分比,带%符号
* 44.66% 0.4422正确 55 0.3% 5% 33.444% -5.66%都错误
*/
@Service("百分比校验器")
@Scope("prototype")
public class PercentValidator extends Validator<Object> {
// 有且仅有两位小数百分比正则表达式
private static final String PERCENT = "^\d+\.?\d{2}%$";
// 保留四位小数的小数,如0.3333(防止excel的百分比转换为了小数)
private static final String FOURFLOAT = "^\d+\.?\d{4}$";
@Override
public void validate(Object dataLine, List<Object> readedLines, Map<String, String> nextLineCellValues) throws Exception {
for (int i = 0; i < beanPropertys.size(); i++) {
Object value = PropertyUtils.getProperty(dataLine, beanPropertys.get(i));
boolean result = false;
if (value != null && value.toString().matches(PERCENT)) {
result = true;
}else if (value != null && value.toString().matches(FOURFLOAT)) {
// 把四位小数转换为两位小数的百分比
value = NumberUtil.getPercent(Double.valueOf(value.toString()));
PropertyUtils.setProperty(dataLine, beanPropertys.get(i), value);
result = true;
}
if(!result){
addError(columnHeaders.get(i)
+ "应该为保留两位小数的百分比 !");
}
}
}
@Override
public boolean isContinueValidate() {
return false;
}
}