我正在React中构建一个数字步进器组件,需要支持整数(正负)和十进制数。为了使算术方法能够正确工作,我只想保留任何可能值的数字部分。
:
用户输入5,5存储在状态
用户输入5.5,5.5存储在状态
用户输入£5.57,5.57保存在状态
用户输入-5,-5存储在状态
为了做到这一点,我一直在.replace()
中使用以下正则表达式来删除任何特殊字符:
value.replace(/[^0-9.]/, '')
但是,这会从负值中删除--
字符。我试着把它添加到捕获组,像这样:replace(/[^0-9.-]/, '')
,但是这个匹配-5
和5 - 3
。我希望保留负数,但排除负号的任何其他用途。
任何想法?
感谢这似乎做你想要的:
const trimSpecial = x => x
// first preserve all `-`
.replace(/[^0-9.-]/g, '')
// then remove all `-` except, optionally, the one in first position
.replace(/(?!^-)-/g, '')
const test = x=>console.log(x, "=>", trimSpecial(x))
test("-5.8")
test("$-3")
test("-5-5")
test("6 - 6")
可以使用
value.replace(/(-d*.?d+).*|[^0-9.]/g, '')
细节
(?!^)-
-连字符不在字符串 的开头|
-或[^0-9.-]
-除数字、点或连字符以外的任何字符。
const c = ['5', '5.5', '£5.57', '-5', '-5-5', '5-3'];
const re = /(?!^)-|[^0-9.-]/g;
for (var i of c) {
console.log(i, '=>', i.replace(re, ''));
}