2009-05-29 14 views
10

Ho questa regex di lavoro, ma ora devo consentire numeri senza decimale cosìjQuery Valuta statunitense validazione Regex per consentire numeri interi e

// 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"); 

Attualmente questo obbliga l'utente ad almeno hanno la .00 aggiunto a un numero, vorrebbe che consenta sia la regex corrente che i numeri interi senza il decimale.

dovrei semplicemente aggiungere il? alla fine della seconda metà della 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:

Ok, ma cosa succede se qualcuno entra 1.2?

+0

Re edit: Beh, e se lo fanno? Non ci stai dicendo cosa vuoi che accada in quel caso. – chaos

risposta

14

Se quello che vuoi è per 1, 1,2 e 1,20 tutti a lavorare:

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

OMG Sono così preso da altre cose che non ho nemmeno pensato a questo, LOL grazie –

2

Sì, basta aggiungere un? alla fine del secondo raggruppamento per renderlo facoltativo. Questo dovrebbe funzionare bene.

+0

ancora una volta, vedi modifica –

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); 
    }     
}); 

Questo funziona perfettamente, prende due decimali.

0

Questa è stata la migliore risposta olistica che abbiamo utilizzato per le espressioni regolari delle entrate che comprende tutto ciò di cui avevamo bisogno: /(?=.)?\$?(([1-9][0-9]{0, 2} (, [0-9] {3}) *) | [0-9] +)? (. [0-9] {1,2})? $/

0

Volevo testare la chiave . Quindi, ho dovuto accettare 999.999. prima che fosse inserita la prima posizione decimale (decimi). Ma, ho ancora voluto max a 2 posizioni decimali (centesimi) - assumendo inserito 999.1 == 999.10 nel mio codice.

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

UPDATE: ho finito per usare jQuery Plugin di convalida a causa della realizzazione.

codice 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"); 

Implementazione:

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

Stesso concetto, ma esteso a utilizzare la funzionalità di convalida.

$(".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; 
} 

E, il gioco è fatto ...

+0

e questo ha risolto giusto? – Drew

+0

Sì Drew. Lo ha fatto per la mia implementazione. Come altri hanno sottolineato, questo non si adatta a un'implementazione correlata alla localizzazione. –

Problemi correlati