我有一个正则表达式,我可以替换所有非数字的内容:
this.value.replace(/[^0-9\.]/g,'');
我如何确保它只允许 1 个点
(第二个点将像其他点一样被替换)
(我知道您可以仅使用输入数字(这对我来说不是这个项目中的选项))
最佳答案
您可以使用一个简单的技巧:
- 按
.
分割字符串,然后仅使用连接数组的前两个元素(使用
其余的什么都没有.splice(0,2)
)。 - 使用简单的正则表达式模式替换所有非数字和非句点字符:
/[^\d\.]/gi
这里是一个示例代码:
// Assuming that `yourString` is the input you want to parse
// Step 1: Split and rejoin, keeping only first occurence of `.`
var splitStr = yourString.split('.');
var parsedStr = splitStr[0];
if (splitStr.length) {
parsedStr = splitStr.splice(0, 2).join('.') + splitStr.join('');
}
// Step 2: Remove all non-numeric characters
parsedStr = parsedStr.replace(/[^\d\.]/gi, '');
概念验证示例:
var tests = [
'xx99',
'99xx',
'xx99xx',
'xxxx999.99.9xxx',
'xxxx 999.99.9 xxx',
'xx99xx.xx99xx.x9',
'xx99xx.99x.9x',
'xx99.xx99.9xx'
];
for (var i = 0; i < tests.length; i++) {
var str = tests[i];
// Split and rejoin, keeping only first occurence of `.`
var splitStr = str.split('.');
var parsedStr = splitStr[0];
if (splitStr.length) {
parsedStr = splitStr.splice(0, 2).join('.') + splitStr.join('');
}
// Remove all non-numeric characters
parsedStr = parsedStr.replace(/[^\d\.]/gi, '');
console.log('Original: ' + str + '\nParsed: ' + parsedStr);
}
关于javascript - 正则表达式(只有 1 点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630564/