我有一个regEx,我替换了所有内容,而不是数字:
this.value.replace(/[^0-9\.]/g,'');
我怎样才能确保它只允许1个点 (第二个点将像其他点一样被替换)
(我知道你可以使用输入数字(这不是我在这个项目中的选项))
答案 0 :(得分:3)
你可以使用一个简单的技巧:
.
分割字符串,然后仅将数组的前两个元素(使用.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);
}
&#13;
答案 1 :(得分:0)
我解决了它。
this.value = this.value.replace(/.*?(\d+.\d+).*/g, "$1");