/**============================================================ * 版权: 久其软件 版权所有 (c) * 包: com.jiuqi.njt.util * 修改记录: * 日期 作者 内容 * ============================================================= * 2013-7-18 liyue * ============================================================*/ package com.jiuqi.njt.util; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; /** * <p>校验类</p> * <p>使用方法:</p> * <pre> Validator validator = null; validator = new Validator(); validator.addRules(ValidateRule.IS_NOT_EMPTY, ValidateRule.IS_REACH_MAX_LENGTH, ValidateRule.IS_MOBILE_NUMBER, ValidateRule.IS_ChinaUnicom_MOBILE_NUMBER); Log.v(Constants.LOG_TAG, validator.val("1234567890123456789012345678901234567890").getErrorMessage()); Log.v(Constants.LOG_TAG, validator.val("18612345678").toString()); Log.v(Constants.LOG_TAG, validator.val("18912345678").toString()); Log.v(Constants.LOG_TAG, validator.val("").toString()); Log.v(Constants.LOG_TAG, "------------------------"); validator = new Validator(); validator.addRules(ValidateRule.IS_NOT_EMPTY, ValidateRule.IS_VALID_EMAIL); Log.v(Constants.LOG_TAG, validator.val("asdf").toString()); Log.v(Constants.LOG_TAG, validator.val("abc@asdf.com").toString()); Log.v(Constants.LOG_TAG, "------------------------"); validator = new Validator(); validator.addRules(ValidateRule.IS_NOT_EMPTY, ValidateRule.IS_DIGITS_ONLY); Log.v(Constants.LOG_TAG, validator.val("1234").toString()); validator.removeRules(ValidateRule.IS_DIGITS_ONLY); Log.v(Constants.LOG_TAG, validator.val("abc123").toString()); * * </pre> * <p>Copyright: 版权所有 (c)<br> * Company: 久其</p> * * @author liyue * @version 2013-7-18 */ public class Validator{ private LinkedHashSet<ValidateRule> validateRules = new LinkedHashSet<ValidateRule>(); public Validator(){ } public Validator(Collection<ValidateRule> validateRules){ this.validateRules.addAll(validateRules); } @Override public String toString(){ return "Validator [validateRules=" + validateRules + "]"; } /** * 增加校验规则,多个规则用,隔开;已经写好的校验规则参考 {@link com.jiuqi.njt.util.ValidateRule ValidateRule} * @param rules void */ public void addRules(ValidateRule... rules){ if(null == rules) return; for(ValidateRule r : rules){ if(!validateRules.contains(r)){ validateRules.add(r); } } } /** * 删除校验规则,多个规则用,隔开 * @param rules void */ public void removeRules(ValidateRule... rules){ if(null == rules) return; for(ValidateRule r : rules){ validateRules.remove(r); } } /** * 校验规则中有一条失败,就终止后续校验 * @param text * @return ReturnObject */ public ReturnObject val(CharSequence text){ return val(text, true); } /** * @param text * @param stopWhenValidationFall 如为false,校验规则中有一条失败,将继续后续校验,有可能导致未知异常抛出 * @return ReturnObject */ public ReturnObject val(CharSequence text, boolean stopWhenValidationFall){ ReturnObject ro = new ReturnObject(); ReturnObject o = null; ArrayList<ReturnObject> rlist = new ArrayList<ReturnObject>(); for(ValidateRule r : validateRules){ o = r.doValidate(text); if(!o.isSuccess){ rlist.add(o); if(stopWhenValidationFall){ break; } } } if(rlist.size() != 0){ ro.data = rlist; ro.isSuccess = false; } else{ ro.isSuccess = true; } return ro; } /** * 跟val()用法一样,只不过返回boolean,只要有一条规则验证失败,即返回false,全部通过则返回true。 * @param text * @return boolean */ public boolean validate(CharSequence text){ ReturnObject o = null; for(ValidateRule r : validateRules){ o = r.doValidate(text); if(!o.isSuccess){ return false; } } return true; } /** * 清除所有的规则 */ public void clearRules(){ validateRules.clear(); } }