//====================================== //Nome: GenJsValidateNumber //Linguagem: Java Script //Descrição: Essa função recebe um número e o valida respeitando os parâmetros passados // //Autor: Equipe Biblioteca Marlin // //Data: 12/06/2002 // //Parâmetros de entrada: // - pStrFormattedR => Número de retorno formatado // - pStrToValidate => Número a ser validado // - pIntFormat => Formato do número quanto aos separadores de milhar e decimal // 1 - VIRGULA: separador decimal // PONTO: separador de milhar // 2 - VIRGULA: separador de milhar // PONTO: separador decimal // - pDblLimiteMin => Valor mínimo do número // - pDblLimiteMax => Valor máximo do número // - pIntMaxNumDec => Número máximo de casas decimais aceitáveis // - pIntOptional => Se o número é opcional ou obrigatório // 0 - obrigatório // 1 - opcional // - //Retorno: Código de erro // //Informações adicionais: // + Funções: // - FncJsVerifyIntParameter(pParam, pIntDefValue) // - FncJsVerifyDblParameter(pParam, pDblDefValue) // - // + Includes: // - // + Objetos: // - // + Stored Procedures: // - //Historico Alteracao: // - 04/07/2002 Thyago Consort // - //====================================== function GenJsValidateNumber(pStrFormattedR, pStrToValidate, pIntFormat, pDblLimiteMin, pDblLimiteMax, pIntMaxNumDec, pIntOptional){ var lObjRegExp; var lStrRegExp; var p = new Array; var lStrSepMilhar; var lStrSepDecimal; var lStrFormatted; //NUMERO var lDblFormatted; var lIntRound; //PARTE INTEIRA DO NUMERO var lIntDecimal; //PARTE DECIMAL DO NUMERO pStrFormattedR[0] = pStrToValidate; //Verificando parâmetros de entrada e valores default p[0] = pIntFormat; if (!FncJsVerifyIntParameter(p,1)) { return -11; } pIntFormat = p[0]; p[0] = pIntMaxNumDec; if (!FncJsVerifyIntParameter(p,0)) { return -11; } pIntMaxNumDec = p[0]; p[0] = pIntOptional; if (!FncJsVerifyIntParameter(p,1)) { return -11; } pIntOptional = p[0]; p[0] = pDblLimiteMin; if (!FncJsVerifyDblParameter(p,0)) { return -11; } pDblLimiteMin = p[0]; p[0] = pDblLimiteMax; if (!FncJsVerifyDblParameter(p,0)) { return -11; } pDblLimiteMax = p[0]; lStrFormatted = pStrToValidate; lStrFormatted = lStrFormatted.replace(/^\s*/, ''); lStrFormatted = lStrFormatted.replace(/\s*$/, ''); if (lStrFormatted == "") { if (pIntOptional == 0) { return -260; } return 0; } //Verifica formatação do número switch(pIntFormat){ case 1: //3.330,50 lStrSepMilhar = "."; lStrSepDecimal = ","; break; case 2: //'3,330.50 lStrSepMilhar = ","; lStrSepDecimal = "."; break; default: return -11; } //Leitura do comando de validação //1 \d{min,max} => min até max caracteres inclusos em 0-9 //2 \d{min,} => pelo menos min caracteres inclusos em 0-9 //3 \d{num} => exatamente num caracteres inclusos em 0-9 //4 (\.\d{3})* => 0 ou mais grupos de caracteres inclusos em 0-9 seguido de um {'.'} //5 (,\d+)? => 0 ou 1 grupo de caracteres {','} seguido de 0-9 //Caso exista separador milhar a validação será diferente lStrRegExp = "^-?(\\d{1,3}(\\" + lStrSepMilhar + "\\d{3})*|\\d+)"; //if (lStrFormatted.indexOf(lStrSepMilhar) != -1){ // lStrRegExp = "^-?\\d{1,3}(\\" + lStrSepMilhar + "\\d{3})*"; //}else{ // lStrRegExp = "^-?\\d+"; //} if (Number(pIntMaxNumDec) > 0){ lStrRegExp = lStrRegExp + "(\\" + lStrSepDecimal + "\\d{1," + pIntMaxNumDec + "})?$"; }else{ lStrRegExp = lStrRegExp + "$"; } lObjRegExp = new RegExp(lStrRegExp); if (!lObjRegExp.test(lStrFormatted)) { return -261; } //Retira o separador milhar e usa o ponto como separador decimal e monta a string de retorno switch(lStrSepMilhar){ case '.': lStrFormatted = lStrFormatted.replace(/\./g, ""); break; case ',': lStrFormatted = lStrFormatted.replace(/\,/g, ""); break; default: } lStrFormatted = lStrFormatted.replace(lStrSepDecimal, "."); pStrFormattedR[0] = lStrFormatted; //Isolando a parte decimal da parte inteira if (lStrFormatted.indexOf(".") != -1){ lIntRound = parseInt(lStrFormatted.substr(0,lStrFormatted.indexOf("."))); lIntDecimal = parseInt(lStrFormatted.substr(lStrFormatted.indexOf(".") + 1, lStrFormatted.length - lStrFormatted.indexOf("."))); } else{ lIntRound = parseInt(lStrFormatted); lIntDecimal = 0; } lIntRound = Math.abs(lIntRound); lDblFormatted = (lIntRound*(Math.pow(10,pIntMaxNumDec)) + lIntDecimal)/(Math.pow(10,pIntMaxNumDec)); if (lStrFormatted.indexOf("-") != -1){ lDblFormatted = (-1)*lDblFormatted; } //Testa se o número está no intervalo pDblLimiteMin < lStrFormatted < pDblLimiteMax if ( lDblFormatted < pDblLimiteMin ){ return -262; } if ( lDblFormatted > pDblLimiteMax ){ return -263; } return 0; }