using System; using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using log4net; using Sleis.Models; using Sleis.Utility; using Sleis.ViewModels; using Spring.Validation; using System.Text; namespace Sleis.Validation.Spring { public class DecimalValidator : RegularExpressionValidator { public string PrecisionFormat { get; set; } internal static ILog Log; public DecimalValidator() { Log = LogManager.GetLogger(this.GetType()); } public override bool Validate(object validationContext, System.Collections.IDictionary contextParams, IValidationErrors errors) { //don't worry about being required. let required attribute handle that Log.DebugFormat("Validate({0},{1},{2})", validationContext, contextParams, errors); base.Expression = Pattern(PrecisionFormat); return base.Validate(validationContext, contextParams, errors); } public static string Pattern(string precisionFormat) { string[] vals = precisionFormat.Split(','); //(\d{1,3}'(\d{3}')*\d{3} StringBuilder pattern = new StringBuilder(@"^-?0*\d{0,"); pattern.Append(vals[0]); pattern.Append(@"}(\.\d{0,"); pattern.Append(vals[1]); pattern.Append(@"})?$"); return pattern.ToString(); } protected override bool Validate(object objectToValidate) { //Decimal d = Convert.ToDecimal(objectToValidate); //Possibly do tostring("G28") in which G specifies most compact fixed point.....this would remove trailing zeros, but would also convert val to scientific notation.... //string val = d.ToString(); return base.Validate(objectToValidate); } } }