Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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
Javascript 使用正则表达式将输入格式设置为货币格式_Javascript_Angular_Regex_Format - Fatal编程技术网

Javascript 使用正则表达式将输入格式设置为货币格式

Javascript 使用正则表达式将输入格式设置为货币格式,javascript,angular,regex,format,Javascript,Angular,Regex,Format,我想将输入格式化为有效的货币字符串,其格式如下: 输入443gr%%g4输出4434 输入gg443.4输出443.40 输入443,4输出443.40 只有数字和是有效的输出。当有时,它应该在后面有固定的2个数字 这是我的代码,但无法正常工作: format(input: any): any { if (input === null || input === undefined || input === "") return null; const

我想将输入格式化为有效的货币字符串,其格式如下:

输入
443gr%%g4
输出
4434

输入
gg443.4
输出
443.40

输入
443,4
输出
443.40

只有
数字
是有效的输出。当有
时,它应该在后面有固定的2个数字

这是我的代码,但无法正常工作:

    format(input: any): any {
    if (input === null || input === undefined || input === "") return null;

    const newInput = input
      .toString()
      .replace(/[^\d\.,]/g, "")
      .replace(",", ".")
      .replace(/\./, "x")
      .replace(/\./g, "")
      .replace(/x/, ".")
      .match(/^\d+([\.,]\d{0,2})?/g);

    if (newInput) return newInput[0].replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1 ").trim();

    return '';
  }
你可以用

const number=['443gr%%g4','gg443.4','443,4','4.4,312344'];
数字。forEach(x=>
console.log(
x、 替换(/[^\d,]+/g',)。替换(/[,](?![^,.]*$)/g',)。替换(“,”,“。”)
.replace(/(\。\d{2})\d*$/,“$1”)
.replace(/(\d)(?=(\d{3})+(?!\d))/g,“$1”)
)

);可能
。替换(/[^\d,]+/g',)。替换(/[,](?![^,.]*$)/g',)。替换(',',')
可以吗?-然后你可以用点来替换逗号这对我来说几乎是完美的,但是除了第一个之外,如何使第二个“.replace”删除所有“?现在每一个新的“.”都会删除上一个,你能告诉我吗?我的意思是只有一个“.”是允许的,每一个新的都是允许的removed@ChrisK.
.replace(/[,](?![^,.]*$)/g',)
确实保留了最后一个,正如我在回答中提到的。如果您需要保留第一个,请使用
.replace(/^([^,]*[,])(.+)$/,函数(x,y,z){返回y+z.replace(/[,]+/g,,);})
是的,我只需要第一个,工作非常好!