jQuery Validate的自定义验证(两个方法合二为一)

时间:2011-09-12 19:22:58

标签: javascript jquery validation jquery-validate

我想知道,如何在我的方法中调用jquery validate的另一个自定义验证方法来验证一些数据。例如,我有一个名为'Document ID'的字段,可以接受CPF或CNPJ(都是巴西文档),我需要用jquery验证来验证它。我正在做这样的事情:

jQuery.validator.addMethod("cpf", function(value, element) {
   // my validation for CPF Documents
}, "CPF inválido!");

jQuery.validator.addMethod("cnpj", function(value, element) {
   // my validation for CNPJ Documents
}, "CNPJ inválido!");

当我为每种类型都有一个字段时,两者都工作正常,但我只有一个,我必须在textfield上发现我的用户类型并验证它,有些像这样:

jQuery.validator.addMethod("documentoId", function(value, element) {

   if (value.lenght <= 11) {
      // validation for CPF and change the message
   }
   else if (value.lenght <= 14) {
      // validation for CNPJ and change the message
   }

}, 'Documento inválido');

但我不知道如何在我的另一个函数(documentId)中调用这些自定义函数(cpf和cnpj)。

我该怎么办?以及如何更改自定义验证中的消息?

谢谢! 干杯!

如果您想查看:http://jsbin.com/ijetex/5/edit

,我已将代码发布到jsbin中

3 个答案:

答案 0 :(得分:4)

这个怎么样?

jQuery.validator.addMethod("documentoId", function(value, element) {

   if (value.length <= 11) {
      jQuery.validator.methods.cpf.call(this, value, element);
   }
   else if (value.length <= 14) {
      jQuery.validator.methods.cnpj.call(this, value, element);
   }

}, 'Documento inválido');

更改错误消息的完整示例

jQuery.validator.addMethod("documento", function(value, element) {

  // remove pontuações
  value = value.replace('.','');
  value = value.replace('.','');
  value = value.replace('-','');
  value = value.replace('/','');

  if (value.length <= 11) {
    if(jQuery.validator.methods.cpf.call(this, value, element)){
      return true;
    } else {
      this.settings.messages.documento.documento = "Informe um CPF válido.";
    }

  }
  else if (value.length <= 14) {
    if(jQuery.validator.methods.cnpj.call(this, value, element)){
      return true;
    } else {
      this.settings.messages.documento.documento = "Informe um CNPJ válido.";
    }

  }

  return false;

}, "Informe um documento válido.");

答案 1 :(得分:2)

jQuery.validator.addMethod("cnpj", function(value, element) {
    return this.optional(element) || /^[0-9]{2}.[0-9]{3}.[0-9]{3}?\/[0-9]{4}-[0-9]{2}$/.test(value);
}, "Formato: 00.000.000/0000-00");

答案 2 :(得分:1)

如何在验证定义范围之外创建这些函数(即不使用匿名函数)?

function cpfValide(value,element) {
  //something
}

function cnpjValide(value,element){
  //something
}
jQuery.validator.addMethod("cpf", cpfValide, "CPF inválido!");


jQuery.validator.addMethod("documentoId", function(value, element) {
  return cpfValidate(value,element) || cnpjValidate(value,element);
//..
}