gpt4 book ai didi

javascript - 需要一个正则表达式来过滤掉除一个小数点之外的所有小数点

转载 作者:行者123 更新时间:2023-12-04 14:32:18 38 4
gpt4 key购买 nike

我正在使用以下代码来否定正则表达式中的字符。通过检查反向,我可以确定输入的值的格式是否正确。本质上,任何数字都可以被允许,但只能有一个小数点(放置在字符串中的任何位置。)我现在拥有它的方式,它可以捕获所有数字,但允许多个小数点(创建无效的浮点数)。我如何调整它以捕获一个以上的小数点(因为我只想允许一个)?

var regex = new RegExp(/[^0-9\.]/g);
var containsNonNumeric = this.value.match(regex);
if(containsNonNumeric){
this.value = this.value.replace(regex,'');
return false;
}

这是我期望发生的事情:

首先,有效输入可以是任意数量的数字,并且可能只有一个小数点。当前行为:用户一个一个输入字符,如果是有效字符就会显示出来。如果字符无效(例如字母 A),该字段将用 '' 替换该字符(本质上在填充字符后立即表现得像退格。我需要的是添加一个太多小数点的相同行为。

最佳答案

据我了解您的问题,下面的代码可能是您正在寻找的:

var validatedStr=str.replace(/[^0-9.]|\.(?=.*\.)/g, "");

它替换除数字和点( . )之外的所有字符,然后替换所有点后跟任意数量的 0-9 字符后跟点。

根据第一条评论进行编辑 - 上面的解决方案删除了除最后一个之外的所有点,作者想删除除第一个之外的所有点:
由于 JS 不支持“后视”,解决方案可能是在正则表达式之前反转字符串,然后再次反转它或使用这个正则表达式:
var counter=0;
var validatedStr=str.replace(/[^0-9.]|\./g, function($0){
if( $0 == "." && !(counter++) ) // dot found and counter is not incremented
return "."; // that means we met first dot and we want to keep it
return ""; // if we find anything else, let's erase it
});

JFTR: counter++仅当条件的第一部分为 true 时才执行,所以它甚至适用于以字母开头的字符串

关于javascript - 需要一个正则表达式来过滤掉除一个小数点之外的所有小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27628746/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com