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