番茄的表单验证类代码修改版

  在经典论坛上发过一次,个人的项目中在后台处理时用到这个东西,对于简单的表单验证还是挺方便的。

  因为不想让代码变得太臃肿,所以有很多不常用的功能就没有再添加了

  对于我佛山人的意见就没有做修改了,为什么?因为我懒呗,哈哈

  今天看到omeweb也修改了一个版本,做了许多修改,改得挺不错的,谢谢了。

  源码在这里:

  //去除字符串两边的空格

  String.prototype.trim = function () {

  return this.replace(/(^\s+)|(\s+$)/g, "");

  }

  //检测字符串是否为空

  String.prototype.isEmpty = function () {

  return !(/.?[^\s ]+/.test(this));

  }

  //检测值是否介于某两个指定的值之间

  String.prototype.isBetween = function (val, min, max) {

  return isNaN(val) == false && val >= min && val <= max;

  }

  //获取最大值或最小值

  String.prototype.getBetweenVal = function (what) {

  var val = this.split(',');

  var min = val[0];

  var max = val[1] == null ? val[0] : val[1];

  if (parseInt(min) > parseInt(max)) {

  min = max;

  max = val[0];

  }

  return what == 'min' ? (isNaN(min) ? null : min) : (isNaN(max) ? null : max);

  }

  var validator = function (formObj) {

  this.allTags = formObj.getElementsByTagName('*');

  //字符串验证正则表达式

  this.reg = new Object();

  this.reg.english = /^[a-zA-Z0-9_\-]+$/;

  this.reg.chinese = /^[\u0391-\uFFE5]+$/;

  this.reg.number = /^[-\+]?\d+(\.\d+)?$/;

  this.reg.integer = /^[-\+]?\d+$/;

  this.reg.float = /^[-\+]?\d+(\.\d+)?$/;

  this.reg.date = /^(\d{4})(-|\/)(\d{1,2})\2(\d{1,2})$/;

  this.reg.email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;

  this.reg.url = /^(((ht|f)tp(s?))\:\/\/)[a-zA-Z0-9]+\.[a-zA-Z0-9]+[\/=\?%\-&_~`@[\]

  \':+!]*([^<>\"\"])*$/;

  this.reg.phone = /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d

  {1,4})?$/;

  this.reg.mobile = /^((\(\d{2,3}\))|(\d{3}\-))?((13\d{9})|(159\d{8}))$/;

  this.reg.ip = /^(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]

  \d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-

  5])$/;

  this.reg.zipcode = /^[1-9]\d{5}$/;

  this.reg.qq = /^[1-9]\d{4,10}$/;

  this.reg.msn = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;

  this.reg.idcard = /(^\d{15}$)|(^\d{17}[0-9Xx]$)/;

  //错误输出信息

  this.tip = new Object();

  this.tip.unknow = '未找到的验证类型,无法执行验证。';

  this.tip.paramError = '参数设置错误,无法执行验证。';

  this.tip.required = '不允许为空。';

  this.tip.english = '仅允许英文字符及下划线 (a-zA-Z0-9_)。';

  this.tip.chinese = '仅允许中文字符。';

  this.tip.number = '不是一个有效的数字。';

  this.tip.integer = '不是一个有效的整数。';

  this.tip.float = '不是一个有效的浮点数。';

  this.tip.date = '不是一个有效的日期格式。 (例如:2007-06-29)';

  this.tip.email = '不是一个有效的电子邮件格式。';

  this.tip.url = '不是一个有效的超链接格式。';

  this.tip.phone = '不是一个有效的电话号码。';

  this.tip.mobile = '不是一个有效的手机号码。';

  this.tip.ip = '不是一个有效的IP地址。';

  this.tip.zipcode = '不是一个有效的邮政编码。';

  this.tip.qq = '不是一个有效的QQ号码。';

  this.tip.msn = '不是一个有效的MSN帐户。';

  this.tip.idcard = '不是一个有效的身份证号码。';

  //获取控件名称

  this.getControlName = function ()

  {

  return this.element.getAttribute('controlName') == null

  ? '指定控件的值'

  : this.element.getAttribute('controlName');

  }

  //设定焦点

  this.setFocus = function (ele) {

  try {

  ele.focus();

  } catch (e){}

  }

  //设置边框颜色

  this.setBorderColor = function (ele) {

  var borderColor = ele.currentStyle ?

  ele.currentStyle.borderColor :

  document.defaultView.getComputedStyle(ele, null)['borderColor'];

  ele.style.borderColor = '#ff9900';

  ele.onkeyup = function () {

  this.style.borderColor = borderColor;

  }

  }

  //输出错误反馈信息

  this.feedback = function (type) {

  try {

  var msg = eval('this.tip.' + type) == undefined ?

  type :

  this.getControlName() + eval('this.tip.' + type);

  } catch (e) {

  msg = type;

  }

  this.setBorderColor(this.element);

  alert(msg);

  this.setFocus(this.element);

  };

  //执行字符串验证

  this.validate = function () {

  var v = this.element.value;

  //验证是否允许非空

  var required = this.element.getAttribute('required');

  if (required != null && v.isEmpty()) {

  this.feedback('required');

  return false;

  }

  //验证是否合法格式

  var dataType = this.element.getAttribute('dataType');

  if (!v.isEmpty() && dataType != null &&  dataType.toLowerCase() != 'password') {

  dataType = dataType.toLowerCase();

  try {

  if (!(eval('this.reg.' + dataType)).test(v)) {

  this.feedback(dataType);

  return false;

  }

  } catch(e) {

  this.feedback('unknow');

  return false;

  }

  }

  //执行数据验证

  var confirm = this.element.getAttribute('confirm');

  if (confirm != null) {

  try {

  var data = eval('formObj.' + confirm + '.value');

  if (v != data) {

  alert('两次输入的内容不一致,请重新输入。');

  this.setBorderColor(this.element);

  this.setFocus(this.element);

  return false;

  }

  } catch (e) {

  this.feedback('paramError');

  return false;

  }

  }

  //验证数字大小

  var dataBetween = this.element.getAttribute('dataBetween');

  if (!v.isEmpty() && dataBetween != null) {

  var min = dataBetween.getBetweenVal('min');

  var max = dataBetween.getBetweenVal('max');

  if (min == null || max == null) {

  this.feedback('paramError');

  return false;

  }

  if (!v.isBetween(v.trim(), min, max)) {

  this.feedback(this.getControlName() + '必须是介于 ' + min + '-' + max + ' 之

  间的数字。');

  return false;

  }

  }

  //验证字符长度

  var dataLength = this.element.getAttribute('dataLength');

  if (!v.isEmpty() && dataLength != null) {

  var min = dataLength.getBetweenVal('min');

  var max = dataLength.getBetweenVal('max');

  if (min == null || max == null) {

  this.feedback('paramError');

  return false;

  }

  if (!v.isBetween(v.trim().length, min, max)) {

  this.feedback(this.getControlName() + '必须是 ' + min + '-' + max + ' 个字符

  。');

  return false;

  }

  }

  return true;

  };

  //执行初始化操作

  this.init = function () {

  for (var i=0; i<this.allTags.length; i++) {

  if (this.allTags[i].tagName.toUpperCase() == 'INPUT' ||

  this.allTags[i].tagName.toUpperCase() == 'SELECT' ||

  this.allTags[i].tagName.toUpperCase() == 'TEXTAREA')

  {

  this.element = allTags[i];

  if (!this.validate())

  return false;

  }

  }

  };

  return this.init();

  }