/// <summary> /// 添加验证类型 /// </summary> /// <param name="node"></param> /// <param name="propertyRules"></param> /// <param name="rules"></param> protected virtual void AddPropertyRulesByXmlNode(XmlNode node, IList <RuleInfo> propertyRules, IDictionary <string, RuleInfo> rules) { if (node.Attributes == null || !rules.ContainsKey(node.Attributes["RuleName"].Value)) { return; } var rule = new RuleInfo(); var args = GetPropertyRuleArgsByXmlNode(node); rule.ValidationTypes = node.Attributes["ValidationType"] != null ? GetValidationTypesByString(node.Attributes["ValidationType"].Value) : GetDefaultValidationTypes(); rule.Name = node.Attributes["Name"] != null ? node.Attributes["Name"].Value : null;; rule.Pattern = ReplacePatternArgs(rules[node.Attributes["RuleName"].Value].Pattern, args); rule.IsRange = rules[node.Attributes["RuleName"].Value].IsRange; rule.IsMultiline = node.Attributes["IsMultiline"] != null && "true".Equals(node.Attributes["IsMultiline"].Value); rule.IsIgnoreCase = node.Attributes["IsIgnoreCase"] == null || "true".Equals(node.Attributes["IsIgnoreCase"].Value); rule.Message = node.Attributes["Message"] != null ? node.Attributes["Message"].Value : null; propertyRules.Add(rule); }
/// <summary> /// 得到错误信息 /// </summary> /// <returns></returns> protected virtual string GetMessage(ValidationInfo validInfo, RuleInfo rule) { var message = string.IsNullOrEmpty(rule.Message) ? validInfo.Message : rule.Message; return(message); }
/// <summary> /// 添加错误信息 /// </summary> /// <param name="results"></param> /// <param name="validInfo"></param> /// <param name="value"></param> /// <param name="rule"></param> /// <returns></returns> protected virtual void AddErrorInfo(IList <ErrorInfo> results, ValidationInfo validInfo, object value, RuleInfo rule) { var isValidate = true; if (rule.IsRange) { if (value == null) { value = 0; } else { var reg = new Regex(@"[^\d]"); value = reg.Replace(value.ToString(), ""); } var values = rule.Pattern.Split('-'); object startValue = values.Length >= 1 ? values[0] : null; object endValue = values.Length >= 2 ? values[1] : null; if (startValue != null) { isValidate = Convert.ToDouble(value) >= Convert.ToDouble(startValue); } if (endValue != null) { isValidate = isValidate && Convert.ToDouble(value) <= Convert.ToDouble(endValue); } } else { var revValue = value == null ? "" : value.ToString(); var option = rule.IsMultiline ? RegexOptions.Multiline : RegexOptions.Singleline; option = rule.IsIgnoreCase ? option | RegexOptions.IgnoreCase : option; if (!Regex.IsMatch(revValue, rule.Pattern, option)) { isValidate = false; } } if (!isValidate) { var message = GetMessage(validInfo, rule); var rev = new ErrorInfo { Key = validInfo.PropertName, Message = message }; results.Add(rev); } }