我目前正在使用PHP進行項目工作,並且需要一些正則表達式幫助。我希望能夠獲取用戶輸入的貨幣價值並去除所有非數字和小數位/美分。正則表達式 - 剝離非數字並刪除美分(如果有的話)
例:
'2.000,00' 到 '2000'
'$ 2.000,00' 到 '2000'
'2abc000' 到 '2000'
'2.000' 到2000年
(我正在使用非美國貨幣格式)
我該怎麼做?我會很感激的幫助 - 謝謝
我目前正在使用PHP進行項目工作,並且需要一些正則表達式幫助。我希望能夠獲取用戶輸入的貨幣價值並去除所有非數字和小數位/美分。正則表達式 - 剝離非數字並刪除美分(如果有的話)
例:
'2.000,00' 到 '2000'
'$ 2.000,00' 到 '2000'
'2abc000' 到 '2000'
'2.000' 到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];
比賽將盡快爲第一號被發現開始,當它擊中的東西,既不是一個數,也不是一個點(即逗號或在你的例子字符串的結尾)
停止編輯:忘記刪除值中的第一個字母。
(只是個人意見,但如果用戶寫chracters不在數字,點,逗號或貨幣符號我會拒絕,而不是試圖清理它的輸入)
在客戶端我使用的輸入類:
$("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("");
}
我如何會刪除美分?那麼2.000,00不會變成20萬? – RS7 2011-01-13 02:03:10