Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 如何编写reg表达式以特定格式替换价格值_Javascript_Regex - Fatal编程技术网

Javascript 如何编写reg表达式以特定格式替换价格值

Javascript 如何编写reg表达式以特定格式替换价格值,javascript,regex,Javascript,Regex,我想使用正则表达式来表示具有特定格式的值。 例如,如果用户将“1”写入输入框,则必须将其替换为“$1” 示例: 1234->1234美元 1234.5->1234.5美元 0.31->0.31美元 3.01->3.01美元 我就这样试过了 formatNumber = (n) => { console.log(n); return n.toString().replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");

我想使用正则表达式来表示具有特定格式的值。 例如,如果用户将“1”写入输入框,则必须将其替换为“$1”

示例:

  • 1234->1234美元
  • 1234.5->1234.5美元
  • 0.31->0.31美元
  • 3.01->3.01美元
我就这样试过了

formatNumber = (n) => {
    console.log(n);
    return n.toString().replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

handleUserInput = (e) => {
    const name = e.target.name
    const value = e.target.value
    this.setState({ [name]: value });
    let errors = this.state.errors;
    e.target.value = '$' + this.formatNumber(value);
}
它适用于整数值,但不适用于十进制值。
我真的很感谢你的帮助。谢谢。

第一次替换
.replace(/\D/g,“”)
您也在删除点。如果要保留点,可以使用
[^\d.]+
而不是
\d

比如说

formatNumber=(n)=>{
返回n.toString()
.替换(/[^\d.]+/g,”)
.替换(/\B(?=(\d{3})+(?!\d))/g,“,”;
};
[
1234,
1234.5,
0.31,
3.01

].forEach(s=>console.log(formatNumber))您可以执行以下操作:

const formatNumber=n=>{
常数[a,…rest]=n.toString()
常数m=
rest.toString()。长度%3==0?
休息
.toString()
.替换(/\D/g,“”)
.replace(/\d{3}/g,n=>`${n}.`):
rest.toString()替换(/\D/g,“”)
返回`${a},${m}`
}
控制台日志(格式编号(1234.5))
控制台日志(格式编号(1234))

log(formatNumber(0.31))
尝试使用以下函数。我认为这对你有帮助

function addCommas(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return '$'+ x1 + x2;
}

您正在删除包括点在内的所有非数字。您可以省略此部分以保留点
。替换(/\D/g,“”)