/**----------------------------------------------------------------***
-* Copyright 2004 - Paul Seamons *
+* Copyright 2007 - Paul Seamons *
* Distributed under the Perl Artistic License without warranty *
* Based upon CGI/Ex/Validate.pm v1.14 from Perl *
* For instructions on usage, see perldoc of CGI::Ex::Validate *
***----------------------------------------------------------------**/
-// $Revision: 1.31 $
+// $Revision: 1.38 $
function Validate () {
this.error = vob_error;
/// look for a group order and then fail back to the keys of the group
var fields = group_val['group fields'];
var order = new Array();
- for (var key in group_val) order[order.length] = key;
+ for (var key in group_val) {
+ if (key == 'extend') continue; // Protoype Array() fix
+ order[order.length] = key;
+ }
order = order.sort();
if (fields) {
if (typeof(fields) != 'object' || ! fields.length)
/// store any extra items from self
for (var key in this) {
+ if (key == 'extend') continue; // Protoype Array() fix
if (! key.match('_error$')
&& ! key.match('^(raise_error|as_hash_\\w+|as_array_\\w+|as_string_\\w+)$')) continue;
EXTRA[key] = this[key];
var errors = new Array();
var types = new Array();
- for (var key in field_val) types[types.length] = key;
+ for (var key in field_val) {
+ if (key == 'extend') continue; // Protoype Array() fix
+ types[types.length] = key;
+ }
types = types.sort();
/// allow for not running some tests in the cgi
for (var i = 0; i < tests.length; i ++) {
var el = form[field];
var type = el.type;
- if (type && (type == 'hidden' || type == 'password' || type == 'text' || type == 'textarea' || type == 'submit')) el.value = values[0] = field_val[tests[i]];
+ if (type && (type == 'hidden' || type == 'password' || type == 'text' || type == 'textarea' || type == 'submit'))
+ el.value = values[0] = '' + field_val[tests[i]];
}
}
if (typeof(values[i]) == 'undefined') continue;
if (! this.filter_types('do_not_trim',types).length)
values[i] = values[i].replace('^\\s+','').replace(new RegExp('\\s+$',''),'');
+ if (this.filter_types('trim_control_chars',types).length)
+ values[i] = values[i].replace(new RegExp('\t', 'g'),' ').replace(new RegExp('[^\x00-\x1F]+','g'),'');
if (this.filter_types('to_upper_case',types).length) {
values[i] = values[i].toUpperCase();
} else if (this.filter_types('to_lower_case',types).length) {
/// the "username" portion of an email address
} else if (type == 'LOCAL_PART') {
if (typeof(value) == 'undefined' || ! value.length) return 0;
- if (! value.match('[^a-z0-9.\\-!&]')) return 0;
- if (! value.match('^[.\\-]')) return 0;
- if (! value.match('[.\\-&]$')) return 0;
+ if (! value.match('[^a-z0-9.\\-!&+]')) return 0;
+ if (! value.match('^[.\\-]')) return 0;
+ if (! value.match('[.\\-&]$')) return 0;
if (! value.match('(\\.-|-\\.|\\.\\.)')) return 0;
/// standard IP address
if (joiner) {
var header = eob_get_val('as_hash_header', extra2, extra1, '');
var footer = eob_get_val('as_hash_footer', extra2, extra1, '');
- for (var key in ret) ret[key] = header + ret[key].join(joiner) + footer;
+ for (var key in ret) {
+ if (key == 'extend') continue; // Protoype Array() fix
+ ret[key] = header + ret[key].join(joiner) + footer;
+ }
}
return ret;
// undo previous inline
if (document.did_inline) {
for (var key in document.did_inline) {
+ if (key == 'extend') continue; // Protoype Array() fix
var el = document.getElementById(key);
if (el) el.innerHTML = '';
}
var d = document.did_inline = new Array();
var hash = err_obj.as_hash();
for (var key in hash) {
+ if (key == 'extend') continue; // Protoype Array() fix
var el = document.getElementById(key);
if (el) el.innerHTML = hash[key];
d[key] = 1;
document.load_val_hash(form, val_hash);
// attach handler
- form.onsubmit = function () {return document.validate(this)};
+ var orig_submit = form.onsubmit || function () { return true };
+ form.onsubmit = function (e) { return document.validate(this) && orig_submit(e, this) };
}
// the end //