summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/validate/_base.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/validate/_base.js')
-rw-r--r--js/dojo/dojox/validate/_base.js144
1 files changed, 144 insertions, 0 deletions
diff --git a/js/dojo/dojox/validate/_base.js b/js/dojo/dojox/validate/_base.js
new file mode 100644
index 0000000..d108c8b
--- /dev/null
+++ b/js/dojo/dojox/validate/_base.js
@@ -0,0 +1,144 @@
+//>>built
+define("dojox/validate/_base", [
+ "dojo/_base/lang",
+ "dojo/regexp", // dojo core expressions
+ "dojo/number", // dojo number expressions
+ "./regexp" // additional expressions
+], function(lang, regexp, number, xregexp) {
+
+ var validate = lang.getObject("dojox.validate", true);
+ /*=====
+ validate = dojox.validate;
+ =====*/
+
+validate.isText = function(/*String*/value, /*Object?*/flags){
+ // summary:
+ // Checks if a string has non whitespace characters.
+ // Parameters allow you to constrain the length.
+ //
+ // value: A string
+ // flags: {length: Number, minlength: Number, maxlength: Number}
+ // flags.length If set, checks if there are exactly flags.length number of characters.
+ // flags.minlength If set, checks if there are at least flags.minlength number of characters.
+ // flags.maxlength If set, checks if there are at most flags.maxlength number of characters.
+
+ flags = (typeof flags == "object") ? flags : {};
+
+ // test for text
+ if(/^\s*$/.test(value)){ return false; } // Boolean
+
+ // length tests
+ if(typeof flags.length == "number" && flags.length != value.length){ return false; } // Boolean
+ if(typeof flags.minlength == "number" && flags.minlength > value.length){ return false; } // Boolean
+ if(typeof flags.maxlength == "number" && flags.maxlength < value.length){ return false; } // Boolean
+
+ return true; // Boolean
+
+};
+
+validate._isInRangeCache = {};
+validate.isInRange = function(/*String*/value, /*Object?*/flags){
+ // summary:
+ // Validates whether a string denoting a number
+ // is between a max and min.
+ //
+ // value: A string
+ // flags: {max:Number, min:Number, decimal:String}
+ // flags.max A number, which the value must be less than or equal to for the validation to be true.
+ // flags.min A number, which the value must be greater than or equal to for the validation to be true.
+ // flags.decimal The character used for the decimal point. Default is ".".
+
+ value = number.parse(value, flags);
+ if(isNaN(value)){
+ return false; // Boolean
+ }
+
+ // assign default values to missing paramters
+ flags = (typeof flags == "object") ? flags : {};
+ var max = (typeof flags.max == "number") ? flags.max : Infinity,
+ min = (typeof flags.min == "number") ? flags.min : -Infinity,
+ dec = (typeof flags.decimal == "string") ? flags.decimal : ".",
+
+ cache = validate._isInRangeCache,
+ cacheIdx = value + "max" + max + "min" + min + "dec" + dec
+ ;
+ if(typeof cache[cacheIdx] != "undefined"){
+ return cache[cacheIdx];
+ }
+
+ cache[cacheIdx] = !(value < min || value > max);
+ return cache[cacheIdx]; // Boolean
+
+};
+
+validate.isNumberFormat = function(/* String */value, /* Object? */flags){
+ // summary: Validates any sort of number based format
+ //
+ // description:
+ // Validates any sort of number based format. Use it for phone numbers,
+ // social security numbers, zip-codes, etc. The value can be validated
+ // against one format or one of multiple formats.
+ //
+ // Format Definition
+ // | # Stands for a digit, 0-9.
+ // | ? Stands for an optional digit, 0-9 or nothing.
+ // All other characters must appear literally in the expression.
+ //
+ // example:
+ // | "(###) ###-####" -> (510) 542-9742
+ // | "(###) ###-#### x#???" -> (510) 542-9742 x153
+ // | "###-##-####" -> 506-82-1089 i.e. social security number
+ // | "#####-####" -> 98225-1649 i.e. zip code
+ //
+ // value: A string
+ //
+ // flags: Object?
+ // FIXME: make pseudo-object for this
+ // format: String
+ //
+ // flags.format A string or an Array of strings for multiple formats.
+ //
+ // example:
+ // | // returns true:
+ // | dojox.validate.isNumberFormat("123-45", { format:"###-##" });
+ //
+ // example:
+ // Check Multiple formats:
+ // | dojox.validate.isNumberFormat("123-45", {
+ // | format:["### ##","###-##","## ###"]
+ // | });
+ //
+
+ var re = new RegExp("^" + xregexp.numberFormat(flags) + "$", "i");
+ return re.test(value); // Boolean
+};
+
+validate.isValidLuhn = function(/* String */value){
+ // summary: Validate a String value against the Luhn algorithm.
+ // description:
+ // Validate a String value against the Luhn algorithm to verify
+ // its integrity.
+
+ var sum = 0, parity, curDigit;
+ if(!lang.isString(value)){
+ value = String(value);
+ }
+ value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces
+ parity = value.length % 2;
+
+ for(var i = 0; i < value.length; i++){
+ curDigit = parseInt(value.charAt(i));
+ if(i % 2 == parity){
+ curDigit *= 2;
+ }
+ if(curDigit > 9){
+ curDigit -= 9;
+ }
+ sum += curDigit;
+ }
+ return !(sum % 10); // Boolean
+};
+
+return validate;
+
+});