[483] | 1 | define([ |
---|
| 2 | "dojo/_base/lang", |
---|
| 3 | "dojo/regexp", // dojo core expressions |
---|
| 4 | "dojo/number", // dojo number expressions |
---|
| 5 | "./regexp" // additional expressions |
---|
| 6 | ], function(lang, regexp, number, xregexp) { |
---|
| 7 | |
---|
| 8 | var validate = lang.getObject("dojox.validate", true); |
---|
| 9 | |
---|
| 10 | validate.isText = function(value, flags){ |
---|
| 11 | // summary: |
---|
| 12 | // Checks if a string has non whitespace characters. |
---|
| 13 | // Parameters allow you to constrain the length. |
---|
| 14 | // value: String |
---|
| 15 | // flags: Object? |
---|
| 16 | // {length: Number, minlength: Number, maxlength: Number} |
---|
| 17 | // |
---|
| 18 | // - flags.length If set, checks if there are exactly flags.length number of characters. |
---|
| 19 | // - flags.minlength If set, checks if there are at least flags.minlength number of characters. |
---|
| 20 | // - flags.maxlength If set, checks if there are at most flags.maxlength number of characters. |
---|
| 21 | |
---|
| 22 | flags = (typeof flags == "object") ? flags : {}; |
---|
| 23 | |
---|
| 24 | // test for text |
---|
| 25 | if(/^\s*$/.test(value)){ return false; } // Boolean |
---|
| 26 | |
---|
| 27 | // length tests |
---|
| 28 | if(typeof flags.length == "number" && flags.length != value.length){ return false; } // Boolean |
---|
| 29 | if(typeof flags.minlength == "number" && flags.minlength > value.length){ return false; } // Boolean |
---|
| 30 | if(typeof flags.maxlength == "number" && flags.maxlength < value.length){ return false; } // Boolean |
---|
| 31 | |
---|
| 32 | return true; // Boolean |
---|
| 33 | |
---|
| 34 | }; |
---|
| 35 | |
---|
| 36 | validate._isInRangeCache = {}; |
---|
| 37 | validate.isInRange = function(value, flags){ |
---|
| 38 | // summary: |
---|
| 39 | // Validates whether a string denoting a number |
---|
| 40 | // is between a max and min. |
---|
| 41 | // value: String |
---|
| 42 | // flags: Object? |
---|
| 43 | // {max:Number, min:Number, decimal:String} |
---|
| 44 | // |
---|
| 45 | // - flags.max A number, which the value must be less than or equal to for the validation to be true. |
---|
| 46 | // - flags.min A number, which the value must be greater than or equal to for the validation to be true. |
---|
| 47 | // - flags.decimal The character used for the decimal point. Default is ".". |
---|
| 48 | |
---|
| 49 | value = number.parse(value, flags); |
---|
| 50 | if(isNaN(value)){ |
---|
| 51 | return false; // Boolean |
---|
| 52 | } |
---|
| 53 | |
---|
| 54 | // assign default values to missing paramters |
---|
| 55 | flags = (typeof flags == "object") ? flags : {}; |
---|
| 56 | var max = (typeof flags.max == "number") ? flags.max : Infinity, |
---|
| 57 | min = (typeof flags.min == "number") ? flags.min : -Infinity, |
---|
| 58 | dec = (typeof flags.decimal == "string") ? flags.decimal : ".", |
---|
| 59 | |
---|
| 60 | cache = validate._isInRangeCache, |
---|
| 61 | cacheIdx = value + "max" + max + "min" + min + "dec" + dec |
---|
| 62 | ; |
---|
| 63 | if(typeof cache[cacheIdx] != "undefined"){ |
---|
| 64 | return cache[cacheIdx]; |
---|
| 65 | } |
---|
| 66 | |
---|
| 67 | cache[cacheIdx] = !(value < min || value > max); |
---|
| 68 | return cache[cacheIdx]; // Boolean |
---|
| 69 | |
---|
| 70 | }; |
---|
| 71 | |
---|
| 72 | validate.isNumberFormat = function(value, flags){ |
---|
| 73 | // summary: |
---|
| 74 | // Validates any sort of number based format |
---|
| 75 | // description: |
---|
| 76 | // Validates any sort of number based format. Use it for phone numbers, |
---|
| 77 | // social security numbers, zip-codes, etc. The value can be validated |
---|
| 78 | // against one format or one of multiple formats. |
---|
| 79 | // |
---|
| 80 | // Format Definition |
---|
| 81 | // | # Stands for a digit, 0-9. |
---|
| 82 | // | ? Stands for an optional digit, 0-9 or nothing. |
---|
| 83 | // All other characters must appear literally in the expression. |
---|
| 84 | // example: |
---|
| 85 | // | "(###) ###-####" -> (510) 542-9742 |
---|
| 86 | // | "(###) ###-#### x#???" -> (510) 542-9742 x153 |
---|
| 87 | // | "###-##-####" -> 506-82-1089 i.e. social security number |
---|
| 88 | // | "#####-####" -> 98225-1649 i.e. zip code |
---|
| 89 | // value: String |
---|
| 90 | // flags: Object? |
---|
| 91 | // - flags.format A string or an Array of strings for multiple formats. |
---|
| 92 | // example: |
---|
| 93 | // | require(["dojox/validate/_base"], function(validate){ |
---|
| 94 | // | // returns true: |
---|
| 95 | // | validate.isNumberFormat("123-45", { format:"###-##" }); |
---|
| 96 | // | }); |
---|
| 97 | // example: |
---|
| 98 | // Check Multiple formats: |
---|
| 99 | // | require(["dojox/validate/_base"], function(validate){ |
---|
| 100 | // | validate.isNumberFormat("123-45", { |
---|
| 101 | // | format:["### ##","###-##","## ###"] |
---|
| 102 | // | }); |
---|
| 103 | // |
---|
| 104 | |
---|
| 105 | var re = new RegExp("^" + xregexp.numberFormat(flags) + "$", "i"); |
---|
| 106 | return re.test(value); // Boolean |
---|
| 107 | }; |
---|
| 108 | |
---|
| 109 | validate.isValidLuhn = function(/* String */value){ |
---|
| 110 | // summary: |
---|
| 111 | // Validate a String value against the Luhn algorithm. |
---|
| 112 | // description: |
---|
| 113 | // Validate a String value against the Luhn algorithm to verify |
---|
| 114 | // its integrity. |
---|
| 115 | |
---|
| 116 | var sum = 0, parity, curDigit; |
---|
| 117 | if(!lang.isString(value)){ |
---|
| 118 | value = String(value); |
---|
| 119 | } |
---|
| 120 | value = value.replace(/[- ]/g,''); //ignore dashes and whitespaces |
---|
| 121 | parity = value.length % 2; |
---|
| 122 | |
---|
| 123 | for(var i = 0; i < value.length; i++){ |
---|
| 124 | curDigit = parseInt(value.charAt(i)); |
---|
| 125 | if(i % 2 == parity){ |
---|
| 126 | curDigit *= 2; |
---|
| 127 | } |
---|
| 128 | if(curDigit > 9){ |
---|
| 129 | curDigit -= 9; |
---|
| 130 | } |
---|
| 131 | sum += curDigit; |
---|
| 132 | } |
---|
| 133 | return !(sum % 10); // Boolean |
---|
| 134 | }; |
---|
| 135 | |
---|
| 136 | return validate; |
---|
| 137 | |
---|
| 138 | }); |
---|