Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式-去掉非数字,如果有的话去掉美分_Php_Regex_Formatting_Currency - Fatal编程技术网

Php 正则表达式-去掉非数字,如果有的话去掉美分

Php 正则表达式-去掉非数字,如果有的话去掉美分,php,regex,formatting,currency,Php,Regex,Formatting,Currency,我目前正在用PHP做一个项目,我需要一些正则表达式的帮助。我想能够采取一个用户输入的货币价值和剥离所有非数字和小数位数/美分 例如: “2.000,00”到“2000” “2.000,00美元”至“2000美元” “2ABC 000”到“2000” “2000年至2000年” (我使用的是非美国货币格式) 我该怎么做?谢谢你的帮助-谢谢 $output = preg_replace('/[^0-9]/s', '', $input); 这将用空字符串替换非数字字符。这将满足您的需要 $your_

我目前正在用PHP做一个项目,我需要一些正则表达式的帮助。我想能够采取一个用户输入的货币价值和剥离所有非数字和小数位数/美分

例如:

“2.000,00”到“2000”
“2.000,00美元”至“2000美元”
“2ABC 000”到“2000”
“2000年至2000年”

(我使用的是非美国货币格式)

我该怎么做?谢谢你的帮助-谢谢

$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];
匹配将在找到第一个数字后立即开始,当它遇到既不是数字也不是点的东西(例如,在示例中是逗号或字符串的结尾)时停止

编辑:忘记先删除值内的字母

(只是个人意见,但如果用户写的字符不是数字、点、逗号或货币符号,我会拒绝输入,而不是试图清除它)

您可以:

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

在客户端,我在输入端使用类:

$(“input.intgr”).keyup(函数(e){//从输入值中过滤非数字。
如果(/\D/g.test($(this.val())$(this.val($(this.val()))替换(/\D/g,);
});
$($input.nmbr”).keyup(函数(e){//从输入值中过滤非数字。
var tVal=$(this.val();
if(tVal!=“”&&isNaN(tVal)){
tVal=(tVal.substr(0,1).替换(/[^0-9\-]/,'')+tVal.substr(1).替换(/[^0-9\.]/,'');
var raVal=tVal.分割(“.”)
如果(额定长度>2)
tVal=raVal[0]+“+raVal.slice(1).连接(“”);
$(this).val(tVal);
} 
});
$($(input.money”).keyup(函数(){money($(this))})
.blur(function(){money($(this),1);});
//-----------独立函数--------------
函数money($INLEM,inBlur,inDec){//强制执行仅限十进制的数字和一个小数点。inBlur bool用于最终切片,以逗号删除3位的集合
var isBlur=inBlur | | 0;//期望布尔值(真/假/0/1所有工作),默认值为0(假)
var dec=指数| 2;
if(//[^,.0-9]/g.test($INLEM.val())//如果是非法字符,请删除并更新
$INLEM.val($INLEM.val().replace(/[^,.0-9]/g,”);
var ra=$INLEM.val().split(“.”);
如果(ra.length>2 | | ra.length>1&&ra[ra.length-1].length>2){//如果太多超过1'',或最后一段超过12位数字计数,请修复并更新
if(ra[ra.length-1].length>2)ra[ra.length-1]=ra[ra.length-1].substr(0,dec);//将最后一个元素缩短为只有dec位计数
$INLEM.val(ra.slice(0,ra.length-1).连接(“”+“+ra[ra.length-1]);//将除最后一个元素外的所有元素作为单个元素、concat dec pt和最后一个元素
}
if(inBlur){
ra=$INLEM.val().split(“.”);
var rvsStr=zReverse(ra[0]。替换(/,/g,”);
var-comDelim=“”;
而(rvsStr.长度>0){
comDelim+=rvsStr.substr(0,3)+“,”;
rvsStr=rvsStr.substr(3);
}
$INLEM.val(zReverse(comDelim).substr(1)+(ra.length==2?”。“+ra[1]:”);
}
}

函数zReverse(inV){//只有简单的ASCII-中断“foo我如何删除美分?这样2.000,00就不会变成200000”@RS7:在执行dqhendricks显示的操作之前,您只需获取逗号(,)的“strpos”,然后将子字符串移到该位置。preg_replace('/,.+$/s','$input)或substr($input,0,strpos($input,,'))您甚至可以将正则表达式放入一个数组中,并执行一个preg_replace()语句来执行这两个替换。