gpt4 book ai didi

javascript - 使用正则表达式掩码实时控制浮点输入

转载 作者:行者123 更新时间:2023-11-30 18:34:00 25 4
gpt4 key购买 nike

我制作了一个函数来实时控制数字和 float 。但是对于必须像这样的表达式的 float 它不能正常工作:

// I wish a number like x figures . 3 figures (example : 123456.123)
/^([1-9][0-9]*|0)(\.[0-9]{3})?$/

但是这个表达式让点消失了...

下面是 /(^\d+$)|(^\d+\.\d+$)|[,.]/,但可以添加多个点:

$('.float_input').live("keypress",function(){inputControl($(this),'double');});

function inputControl(input,format)
{
var value=input.val();
if (format=='int'){expression=/(^\d+$)|(^\d+\.\d+$)/;}
else if (format=='double'){expression=/(^\d+$)|(^\d+\.\d+$)|[,.]/;}
var values=value.split("");
var update="";
for(id in values)
{
if (expression.test(values[id])==true && values[id]!='')
{
// also replace ',' by '.'
update=update+''+values[id].replace(',','.');
}
}
input.val(update);
}

所以我有多个点或没有点,这让我很疯狂,因为我肯定会接近解决方案。

编辑 > 解决方案

哎呀,感谢有关正则表达式的帮助,我找到了解决方案!

需要两个测试:

  • 一个是字符测试,一个一个测试
  • 另一个在输入字符时测试整个输入

这是最终的脚本,效果如花,分享给大家:

$('.numeric_input').live("keyup",function(){inputControl($(this),'int');});
$('.float_input').live("keyup",function(){inputControl($(this),'float');});

function inputControl(input,format)
{
var value=input.val();
var values=value.split("");
var update="";
var transition="";
if (format=='int'){
expression=/^([0-9])$/;
finalExpression=/^([1-9][0-9]*)$/;
}
else if (format=='float')
{
var expression=/(^\d+$)|(^\d+\.\d+$)|[,\.]/;
var finalExpression=/^([1-9][0-9]*[,\.]?\d{0,3})$/;
}
for(id in values)
{
if (expression.test(values[id])==true && values[id]!='')
{
transition+=''+values[id].replace(',','.');
if(finalExpression.test(transition)==true)
{
update+=''+values[id].replace(',','.');
}
}
}
input.val(update);
}

最佳答案

这个正则表达式

(/(^\d+$)|(^\d+.\d+$)|[,.]/)

应该匹配

  • 1111111 每 (^\d+$)
  • 或 111111.11111 (^\d+.\d+$)
  • 或逗号后跟任何字符,它可以在表达式中的任何位置。

我怀疑你的正则表达式应该是请注意,我已经逃脱了最后一段时间。这将匹配逗号或句号

/(^\d+[,\.]{0,1}\d{3})/

根据评论中的说明,可能正是您想要的

[-+]?[0-9]*\.?[0-9]+

也可以

注意:您可以使用 Roy Osherove 的 Regulazy 极大地简化您的正则表达式生活。或 Regex Buddy 工具。

关于javascript - 使用正则表达式掩码实时控制浮点输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8824439/

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