2009-05-29 30 views
10

tengo esta expresión regular de trabajo, pero ahora necesito para permitir números sin punto decimal, asíjQuery moneda a la validación de expresiones regulares para permitir números enteros, así

// Validate for 2 decimal for money 
jQuery.validator.addMethod("decimalTwo", function(value, element) { 
    return this.optional(element) || /^(\d{1,3})(\.\d{2})$/.test(value); 
}, "Must be in US currency format 0.99"); 

Actualmente esto obliga al usuario a al menos tienen el 0,00 añaden a un número, le gustaría permitir tanto la expresión regular actual como los números enteros sin el decimal.

¿Agregaría el? al final de la segunda mitad del RegEx?

// Validate for 2 decimal for money 
jQuery.validator.addMethod("decimalTwo", function(value, element) { 
    return this.optional(element) || /^(\d{1,3})(\.\d{2})?$/.test(value); 
}, "Must be in US currency format 0.99"); 

EDIT:

bien, pero ¿y si alguien entra en 1.2?

+0

Re Edit: Bueno, ¿y si lo hacen? No nos está diciendo lo que quiere que suceda en ese caso. – chaos

Respuesta

14

Si lo que queremos es que 1, 1.2, 1.20 y todos a trabajar:

/^(\d{1,3})(\.\d{1,2})?$/ 
+0

OMG Estoy tan atrapado en otras cosas que ni siquiera pensé en esto, LOL gracias –

2

Sí, simplemente añada? hasta el final de la segunda agrupación para que sea opcional. Eso debería funcionar bien.

+0

un giro más, ver edición –

0
$.validator.addMethod("money", function (value, element) { 
    if ($("#<%= rdOtherAmt.ClientID %> input:checked")) { 
     return this.optional(element) || /^((\d{1,5})+\.\d{2})?$|^\$?[\.]([\d][\d]?)$/.test(value); 
    }     
}); 

Esto funciona perfectamente, toma dos decimales.

0

Esta fue la mejor respuesta holística que hemos utilizado para las entradas de moneda regex que abarca todo lo que necesitábamos: /(?=.)^\$?(([1-9][0-9]{0, 2} (, [0-9] {3}) *) | [0-9] +)? (. [0-9] {1,2})? $/

0

Quería probar en keyup . Por lo tanto, necesitaba aceptar 999.999. antes de que se ingresara la primera posición decimal (décimas). Pero, todavía quería maximizar a 2 decimales (centésimas) posiciones - asumiendo que ingresé 999.1 == 999.10 en mi código.

var currencywithcommas = /^(\d+|\d{1,3}(,\d{3})*)+(\.\d{2})?$/; 
if ($("#yourelement").val().match(currencywithcommas)) { 
    // positive match code 
} 

ACTUALIZACIÓN: Terminé usando jQuery Plugin de validación por la aplicación.

código Prototipo:

jQuery.validator.addMethod("currencywithcommas", function (value, element) { 
    var currencywithcommasReg = /^(\d+|\d{1,3}(,\d{3})*)+(\.\d{2})?$/; 
    return this.optional(element) || value.match(currencywithcommasReg); 
}, "Must be in US currency format 9.99"); 

Implementación:

$("#form1").validate({ 
     rules: { 
      amount1: { 
       required: true, 
       currencywithcommas: true 
      }, 
... 

mismo concepto, sino que se extendió a utilizar la funcionalidad de validación.

$(".reqField1").each(function() { 
    $(this).keyup(function() { 
     $("#submitButton").prop("disabled", CheckInputs(".reqField1")); 
    }); 
}); 

function CheckInputs(reqfldclass) { 
    var valid = false; 
    $(".reqField1").each(function() { 
     if (valid) { return valid; } 
     var input = $.trim($(this).val()); 
     valid = !input; 
    }); 
    return valid; 
} 

Y, Bob es tu tío ...

+0

y esto lo resolvió ¿verdad? – Drew

+0

Sí Drew. Lo hizo por mi implementación. Como han señalado otros, esto no encaja en una implementación relacionada con la localización. –

Cuestiones relacionadas