X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web%2Fresources%2FWebUIValidation.js;h=8948fc36a85e8c1ad2ecbadaddbb9a703058e7e7;hb=6c035e225abc36a15501a03f574744824225350b;hp=52f5f6741efaa705d1a273578361fb15dfaadcfa;hpb=a8b22e0e864c03b8cfd2f2cb5a8075b6611c5553;p=mono.git diff --git a/mcs/class/System.Web/resources/WebUIValidation.js b/mcs/class/System.Web/resources/WebUIValidation.js index 52f5f6741ef..8948fc36a85 100644 --- a/mcs/class/System.Web/resources/WebUIValidation.js +++ b/mcs/class/System.Web/resources/WebUIValidation.js @@ -28,12 +28,19 @@ var have_validation_summaries = false; +function HaveRegexp () +{ + if (window.RegExp) + return true; + return false; +} + function ValidatorOnLoad () { if (typeof (Page_ValidationSummaries) != 'undefined' && Page_ValidationSummaries != null) have_validation_summaries = true; - for (var v in Page_Validators) { + for (var v = 0; v < Page_Validators.length; v++) { var vo = Page_Validators [v]; var funcname = vo.getAttribute ("evaluationfunction"); @@ -95,7 +102,7 @@ function ValidatorCommonOnSubmit () html += header; html += list_pre; - for (var v in Page_Validators) { + for (var v = 0; v < Page_Validators.length; v++) { var vo = Page_Validators [v]; if (vo.getAttribute ("isvalid").toLowerCase() == "false") { @@ -115,7 +122,7 @@ function ValidatorCommonOnSubmit () if (attr != null && attr.toLowerCase() == "true") { var v_contents = ""; - for (var v in Page_Validators) { + for (var v = 0; v < Page_Validators.length; v++) { var vo = Page_Validators [v]; if (vo.getAttribute ("isvalid").toLowerCase() == "false") { @@ -177,7 +184,7 @@ function Page_ClientValidate() } } - for (var v in Page_Validators) { + for (var v = 0; v < Page_Validators.length; v++) { var vo = Page_Validators [v]; var evalfunc = vo["evaluationfunction"]; var result = false; @@ -202,7 +209,7 @@ function Page_ClientValidate() /*******************/ /* type converters */ -function ToInteger (s) +function ToInteger (s, validator) { if ((v = parseInt(s, 10)) != s - 0) return null; @@ -210,12 +217,12 @@ function ToInteger (s) return v; } -function ToString (s) +function ToString (s, validator) { return s; } -function ToDouble (s) +function ToDouble (s, validator) { if ((v = parseFloat(s)) != s - 0) return null; @@ -223,16 +230,70 @@ function ToDouble (s) return v; } -function ToDate (s) +function ToDate (s, validator) { - /* NYI */ - return null; + if (!HaveRegexp ()) + return null; + var m, day, month, year; + var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\s*$"); + m = s.match(yearFirstExp); + if (m != null && (m[2].length == 4 || validator.dateorder == "ymd")) { + day = m[6]; + month = m[5]; + year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10), validator.cutoffyear) + } + else { + if (validator.dateorder == "ymd") return null; + var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$"); + m = s.match(yearLastExp); + if (m == null) return null; + if (validator.dateorder == "mdy") { + day = m[3]; + month = m[1]; + } + else { + day = m[1]; + month = m[3]; + } + year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10), validator.cutoffyear) + } + month -= 1; + var date = new Date(year, month, day); + return (typeof(date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null; } function ToCurrency (s) { - /* NYI */ - return null; + if (!HaveRegexp ()) + return null; + + var hasDigits = (validator.digits > 0); + var beginGroupSize, subsequentGroupSize; + var groupSizeNum = parseInt(validator.groupsize, 10); + if (!isNaN(groupSizeNum) && groupSizeNum > 0) { + beginGroupSize = "{1," + groupSizeNum + "}"; + subsequentGroupSize = "{" + groupSizeNum + "}"; + } else { + beginGroupSize = subsequentGroupSize = "+"; + } + var exp = new RegExp("^\\s*([-\\+])?((\\d" + beginGroupSize + "(\\" + validator.groupchar + "\\d" + subsequentGroupSize + ")+)|\\d*)" + + (hasDigits ? "\\" + validator.decimalchar + "?(\\d{0," + validator.digits + "})" : "") + + "\\s*$"); + var m = s.match(exp); + if (m == null) + return null; + if (m[2].length == 0 && hasDigits && m[5].length == 0) + return null; + var cleanInput = (m[1] != null ? m[1] : "") + m[2].replace(new RegExp("(\\" + validator.groupchar + ")", "g"), "") + ((hasDigits && m[5].length > 0) ? "." + m[5] : ""); + var num = parseFloat(cleanInput); + return (isNaN(num) ? null : num); +} + +function GetFullYear(year, maxYear) +{ + var twoDigitMaxYear = maxYear % 100; + var centure = maxYear - twoDigitMaxYear; + return ((year > twoDigitMaxYear) ? (centure - 100 + year) : (centure + year)); } /*******************/ @@ -249,13 +310,13 @@ function CompareValidatorEvaluateIsValid (validator) var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate)); var compare = (ControlToCompare != null && ControlToCompare != "") ? ValidatorTrim (ValidatorGetValue (ControlToCompare)) : ValueToCompare; - var left = Convert (ctrl_value, DataType); + var left = Convert (ctrl_value, DataType, validator); if (left == null) { ValidatorFailed (validator); return false; } - var right = Convert (compare, DataType); + var right = Convert (compare, DataType, validator); if (right == null) { ValidatorSucceeded (validator); return true; @@ -306,7 +367,7 @@ function RangeValidatorEvaluateIsValid (validator) return true; } - var val = Convert (ctrl_value, DataType); + var val = Convert (ctrl_value, DataType, validator); if (val == null || val < MinimumValue || val > MaximumValue) { ValidatorFailed (validator); return false; @@ -329,9 +390,13 @@ function RegularExpressionValidatorEvaluateIsValid (validator) return true; } + if (!HaveRegexp ()) + return false; // better fail than pass invalidated input to the + // backend + var r = new RegExp (ValidationExpression); match = r.exec (ctrl_value); - if (match == null || match[0] == "") { + if (match == null || match[0] != ctrl_value) { ValidatorFailed (validator); return false; } @@ -393,11 +458,11 @@ function CustomValidatorEvaluateIsValid (validator) /*********************/ /* utility functions */ -function Convert (s, ty) +function Convert (s, ty, validator) { var cvt = this ["To" + ty]; if (typeof (cvt) == 'function') - return cvt (s); + return cvt (s, validator); else return null; }