javascript - validar - Validación de moneda Regex
validar texto javascript (2)
El RegEx
// Requires a decimal and commas
^/$?(([1-9]/d{0,2}(,/d{3})*)|0)?/./d{1,2}$
// Allows a decimal, requires commas
(?=.*/d)^/$?(([1-9]/d{0,2}(,/d{3})*)|0)?(/./d{1,2})?$
// Decimal and commas optional
(?=.*?/d)^/$?(([1-9]/d{0,2}(,/d{3})*)|/d+)?(/./d{1,2})?$
// Decimals required, commas optional
^/$?(([1-9]/d{0,2}(,/d{3})*)|0)?/./d{1,2}$
// *Requires/allows X here also implies "used correctly"
El desglose de RegEx
- Cuando las partes opcionales son demasiado liberales, tenemos que mirar hacia adelante y garantizar que haya un número:
(?=.*/d)
- Puede o no comenzar con un signo de dólar (supongo que los negativos no son válidos):
^/$?
- Sigue eso con
-?
para permitir números negativos
- Sigue eso con
- Comienza con 1-3 números:
[1-9]/d{0,2}
- Podría ser casi
(/d{1,3})
, pero eso permitiría "0,123" - Una excepción, puede comenzar con 0 en el caso de "$ 0,50" o "0,50":
|0
- Estas expresiones regulares suponen que varios de los principales 0 no son válidos
- Podría ser casi
- Cualquier cantidad de números de tres dígitos separados por coma:
(,/d{3})*
- Eliminar
?
antes de/.
si desea rechazar los números que comienzan con "$".
- Eliminar
- Requiere o permite decimal (uno o dos dígitos):
/./d{1,2}
o(/./d{1,2})?
respectivamente - Termine con
$
(sin guardar) para asegurarse de que no haya nada después de un número válido (como $ 1,000.00b)
Para usar la expresión regular, use el método de match
la cadena y coloque la expresión regular entre dos barras diagonales.
// The return will either be your match or null if not found
yourNumber.match(/(?=.)^/$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(/.[0-9]{1,2})?$/);
// For just a true/false response
!!yourNumber.match(/(?=.)^/$?(([1-9][0-9]{0,2}(,[0-9]{3})*)|0)?(/.[0-9]{1,2})?$/);
Demostración con casos de prueba
var tests = [
"$1,530,602.24", "1,530,602.24", "$1,666.24$", ",1,666,88,", "1.6.66,6", ".1555."
];
var regex = /(?=.*/d)^/$?(([1-9]/d{0,2}(,/d{3})*)|0)?(/./d{1,2})?$/;
for (i = 0; i < tests.length; i++) {
console.log(tests[i] + '' // '' + regex.test(tests[i]));
document.write(tests[i] + '' // '' + regex.test(tests[i]) + ''<br/>'');
}
Necesito ayuda para la expresión regular de divisas en la función jQuery.
- Opcionalmente, permite el signo "$" solo una vez al comienzo.
- Permite la coma como separador de grupos digitales, pero no al principio o al final.
- Permite solo 2 dígitos redondeados después del punto decimal.
- Permite solo un punto decimal y no al principio o al final.
Válido:
$1,530,602.24
1,530,602.24
Inválido:
$1,666.24$
,1,666,88,
1.6.66,6
.1555.
Intenté /^/$?[0-9][0-9,]*[0-9]/.?[0-9]{0,2}$/i
; funciona bien, excepto que coincide con 1,6,999
.
Aquí está la expresión regular que debería lograr esto para usted.
El inicio debe ser numérico o $ signo. Puede haber cualquier cantidad de dígitos con comas, pero debe comenzar y terminar con un dígito. Opcionalmente, puede haber un punto decimal con hasta dos dígitos después de él al final de la línea.
var your_input = "$1,000,000.00";
var valid_dollar_amt_regex = /^/$?[0-9][0-9,]*[0-9]/.?[0-9]{0,2}$/i;
if(valid_dollar_amt_regex.test(your_input))
alert("Valid!");
O usa esta función
function validate_money(i) {
var valid_dollar_amt_regex = /^/$?[0-9][0-9,]*[0-9]/.?[0-9]{0,2}$/i;
return valid_dollar_amt_regex.test(i);
}
Véalo funcionar: http://jsfiddle.net/znuJf/