Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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_Regex_Reactjs - Fatal编程技术网

Javascript 从格式化字符串到数字和数字的转换

Javascript 从格式化字符串到数字和数字的转换,javascript,regex,reactjs,Javascript,Regex,Reactjs,作为我继承的一个晦涩难懂的定制ReactJS库的参数,我需要两个正则表达式,其中一个将数字转换为格式良好的字符串,另一个正则表达式将该字符串转换回用户可以理解的字符串 挑战在于parseFloat会吃掉最后一个十进制分隔符,也就是说,如果我尝试输入420.1,我可以输入420很好,但是如果我输入十进制分隔符,什么也不会发生,因为420.将立即转换为420。我可以输入4201,然后用箭头键导航,然后输入十进制分隔符。但是如果我输入了例如420.1,用光标导航到4之后的右边,并输入一个额外的,我会立

作为我继承的一个晦涩难懂的定制ReactJS库的参数,我需要两个正则表达式,其中一个将数字转换为格式良好的字符串,另一个正则表达式将该字符串转换回用户可以理解的字符串

挑战在于
parseFloat
会吃掉最后一个十进制分隔符,也就是说,如果我尝试输入
420.1
,我可以输入
420
很好,但是如果我输入十进制分隔符,什么也不会发生,因为
420.
将立即转换为
420
。我可以输入
4201
,然后用箭头键导航,然后输入十进制分隔符。但是如果我输入了例如
420.1
,用光标导航到
4
之后的右边,并输入一个额外的
,我会立即看到
4.20
,而不是
4.201
,这要感谢
parseFloat
的实现

我尝试在Javascript语法中转换number->string(灵感来自于一个by)如下

formatter={value=>`${value}`。替换(/[^\d\-,]/g,”)//基本卫生。
.replace(“.”,“,”)//将所有期间更改为comas。
.replace(/,(?=*,)/g,“”/)删除除最后一个COMA之外的所有COMA。
.replace(//$/,“\uuuuuu”)//Hack为浮动箭头添加间距,否则会隐藏部分输入
}
返回时,转换字符串->编号当前已完成

parser={x=>parseFloat(`${x}`.replace(/,(?=.*))/g,“”//删除除最后一个字符外的所有字符
.replace(/,/,“)//移除最后一个(剩余的)昏迷
.替换(/g/g,“”//删除间距
}
到目前为止,我的想法是:我可以添加一些奇特的正则表达式来实现这一点吗?或者我可以在
格式化程序和
解析器中使用一些简单的JS函数吗

PS:如果你认为“这是重复的”-嗯,我读了大量的Stackoverflow Q&a,但没有一个能完全解决我的问题


编辑:我更新了
解析器的
部分,在它被
之前。替换(/,”).replace(/,/g,“”)
供参考:
。replace(“,”,”)
不会将所有逗号替换为
,只替换第一个。您需要
。replace(/\./g,”,“,”
来替换所有逗号。
。replace(/,/g,“,”)
可以压缩为
。替换(/[,]+/g,”)
@WiktorStribiżew我相应地编辑了我的问题。@WiktorStribiżew And?确实很有趣:-)你可以使用状态(欺骗和避免数据丢失)吗?回调函数在什么上下文中运行;您是否有权访问此
?数字是否必须准确;你能偷偷地输入一些你可能不会使用的数字,然后再把它删掉吗?@user120242关于使用状态我不知道你在想什么-我可以试试。我被告知一切都必须在参数赋值中发生。仅供参考:
。替换(“.”,“,”)
不会将所有逗号替换为
,只替换第一个。您需要
.replace(/\./g,“,”)
来替换所有
.replace(/,/g,“”)。replace(/,/g,“”)
可以压缩为
。replace(/[,[u]+/g,””)
@WiktorStribiżew我相应地编辑了我的问题。@WiktorStribiżew And?确实很有趣:-)你可以使用state(欺骗和避免数据丢失)吗?回调函数在什么上下文中运行;您是否有权访问此
?数字是否必须准确;你能偷偷地输入一些你可能不会使用的数字,然后再把它删掉吗?@user120242关于使用状态我不知道你在想什么-我可以试试。我被告知一切都必须在参数赋值中发生。