Regex – Elimine los datos numéricos y elimine los centavos si los hubiera

Actualmente estoy trabajando en un proyecto en PHP y necesito ayuda con Regex. Me gustaría poder tomar un valor monetario ingresado por el usuario y eliminar todos los lugares / dígitos no numéricos y decimales.

Ex:

‘2.000,00’ a ‘2000’
‘$ 2.000,00’ a ‘2000’
‘2abc000’ a ‘2000’
‘2,000’ a 2000

(Estoy usando el formato de moneda no estadounidense)

¿Cómo puedo hacer esto? Apreciaría la ayuda – Gracias

Solutions Collecting From Web of "Regex – Elimine los datos numéricos y elimine los centavos si los hubiera"

Tu puedes hacer:

$str = preg_replace('/[^0-9,]|,[0-9]*$/','',$str); 
 $output = preg_replace('/[^0-9]/s', '', $input); 

eso debería reemplazar caracteres no numéricos con cadenas vacías.

Esto debería hacer lo que quieras.

 $your_string_without_letters = preg_replace('\w+', '', $your_string) preg_match('[0-9][0-9.]*', $your_string_without_letters, $matches); $clean_string = $matches[0]; 

La partida comenzará tan pronto como se encuentre el primer número, y se detendrá cuando llegue a algo que no es ni un número ni un punto (es decir, una coma o el final de la cadena en los ejemplos)

EDITAR: olvidé primero eliminar las letras dentro del valor.

(Solo una opinión personal, pero si un usuario escribe caracteres que no son números, puntos, comas o símbolos de moneda, rechazaría la entrada en lugar de intentar limpiarla)

En el lado del cliente, uso clases en las entradas:

 $("input.intgr").keyup(function (e) { // Filter non-digits from input value. if (/\D/g.test($(this).val())) $(this).val($(this).val().replace(/\D/g, '')); }); $("input.nmbr").keyup(function (e) { // Filter non-numeric from input value. var tVal=$(this).val(); if (tVal!="" && isNaN(tVal)){ tVal=(tVal.substr(0,1).replace(/[^0-9\.\-]/, '')+tVal.substr(1).replace(/[^0-9\.]/, '')); var raVal=tVal.split(".") if(raVal.length>2) tVal=raVal[0]+"."+raVal.slice(1).join(""); $(this).val(tVal); } }); $("input.money").keyup(function(){ money($(this)) }) .blur(function(){ money($(this),1); }); //----------- free-standing functions -------------- function money($inElem,inBlur,inDec){//enforces decimal - only digits and one decimal point. inBlur bool for final slicing to sets of 3 digits comma delimted var isBlur=inBlur||0;//expects boolean (true/false/0/1 all work), default to 0 (false) var dec=inDec || 2; if(/[^,.0-9]/g.test($inElem.val()))//if illegal chars, remove and update $inElem.val($inElem.val().replace(/[^,.0-9]/g, "")); var ra=$inElem.val().split("."); if(ra.length>2 || ra.length>1 && ra[ra.length-1].length>2){//if too more than 1 "." or last segment more than dec digit count, fix and update if(ra[ra.length-1].length>2) ra[ra.length-1]=ra[ra.length-1].substr(0,dec);//shorten last element to only dec digit count $inElem.val(ra.slice(0,ra.length-1).join("")+"."+ra[ra.length-1]);//glom all but last elem as single, concat dec pt and last elem } if(inBlur){ ra=$inElem.val().split("."); var rvsStr=zReverse(ra[0].replace(/,/g,"")); var comDelim=""; while(rvsStr.length>0){ comDelim+=rvsStr.substr(0,3)+","; rvsStr=rvsStr.substr(3); } $inElem.val(zReverse(comDelim).substr(1)+(ra.length==2?"."+ra[1]:"")); } } function zReverse(inV){//only simple ASCII - breaks "foo 𝌆 bar mañana" return inV.split("").reverse().join(""); }