Regex – Strip non numeric и удаляет центы, если они есть

В настоящее время я работаю над проектом на PHP, и мне нужна помощь Regex. Я бы хотел, чтобы пользователь ввел денежное значение и разделил все не числовые и десятичные числа / цента.

Пример:

«От 2000 до 2000»
'$ 2.000,00' до '2000'
'2abc000' до '2000'
«2000» – 2000 год

(Я использую форматирование неамериканской валюты)

Как я могу это сделать? Буду признателен за помощь – Спасибо

Ты можешь сделать:

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

который должен заменить не числовые символы пустыми строками.

Это должно делать то, что вы хотите.

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

Матч начнется, как только будет найден первый номер, и остановится, когда он достигнет того, что не является ни числом, ни точкой (т. Е. Запятой или концом строки в ваших примерах)

EDIT: забыл сначала удалить буквы внутри значения.

(Только личное мнение, но если пользователь записывает градиенты, которые не являются цифрами, точками, запятыми или символами валюты, я бы отказался от ввода, а не пытался его очистить)

На стороне клиента я использую классы на входах:

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