diff --git a/src/core.js b/src/core.js index e34c127..8fb82a4 100644 --- a/src/core.js +++ b/src/core.js @@ -626,6 +626,22 @@ $.extend( $.validator, { val = this.elementValue( element ), result, method, rule; + // If a normalizer is defined for this element, then + // call it to retreive the changed value instead + // of using the real one. + // Note that `this` in the normalizer is `element`. + if ( typeof rules.normalizer === "function" ) { + val = rules.normalizer.call( element, val ); + + if ( typeof val !== "string" ) { + throw new TypeError( "The normalizer should return a string value." ); + } + + // Delete the normalizer from rules to avoid treating + // it as a pre-defined method. + delete rules.normalizer; + } + for ( method in rules ) { rule = { method: method, parameters: rules[ method ] }; try { @@ -860,7 +876,7 @@ $.extend( $.validator, { // meta-characters that should be escaped in order to be used with JQuery // as a literal part of a name/id or any selector. escapeCssMeta: function( string ) { - return string.replace( /(!|"|#|\$|%|&|'|\(|\)|\*|\+|,|\.|\/|:|;|<|=|>|\?|@|\[|\\|\]|\^|`|\{|\||\}|~)/g, "\\$1"); + return string.replace( /([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g, "\\$1" ); }, idOrName: function( element ) { @@ -1103,7 +1119,7 @@ $.extend( $.validator, { // evaluate parameters $.each( rules, function( rule, parameter ) { - rules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter; + rules[ rule ] = $.isFunction( parameter ) && rule !== "normalizer" ? parameter( element ) : parameter; } ); // clean number parameters diff --git a/test/.jshintrc b/test/.jshintrc index 6feee7c..23aa766 100644 --- a/test/.jshintrc +++ b/test/.jshintrc @@ -35,6 +35,7 @@ "stop": false, "test": false, "TestHelpers": true, + "throws": false, "JSHINT": false } } diff --git a/test/index.html b/test/index.html index 5a61684..32b28cf 100644 --- a/test/index.html +++ b/test/index.html @@ -72,6 +72,7 @@ +