使用正则表达式掩码实时控制浮点输入
Posted
技术标签:
【中文标题】使用正则表达式掩码实时控制浮点输入【英文标题】:Live control a float input with a regex mask 【发布时间】:2012-01-11 18:11:55 【问题描述】:我制作了一个函数来控制数字和浮点数。 但它不适用于浮点数,必须像这样的表达式:
// 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]*[,\.]?\d0,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);
【问题讨论】:
【参考方案1】:这个正则表达式
(/(^\d+$)|(^\d+.\d+$)|[,.]/)
应该匹配
1111111 每 (^\d+$) 或 111111.11111 每个 (^\d+.\d+$) 或逗号后跟任何字符,它可以是表达式中的任何位置。我怀疑你的正则表达式应该是 请注意,我已经逃脱了最后阶段。这将匹配逗号或句点
/(^\d+[,\.]0,1\d3)/
根据 cmets 中的说明,可能正是您想要的
[-+]?[0-9]*\.?[0-9]+
也可以
注意:您可以使用 Roy Osherove 的 Regulazy 或 Regex Buddy 工具极大地简化您的正则表达式生活。
【讨论】:
诚然,我不确定您要完成什么。 感谢您的回复,但您的正则表达式允许:“............”我希望只有一个点。我希望,只有: xnumbers 。 3个号码(12345679.123) [\.]1 应该可以做到只制作一个句点,\d3 将是三位数字。 这会返回 SyntaxError: Invalid regular expression: /(^\d+[,\.]0,1\d3/: Unterminated group 对不起 - 把我的括号放在错误的一边......我添加的另一个可能更优化,顺便说一句......【参考方案2】:您想要小数点后面的任意数量的数字(逗号或句点)?
有什么问题:
/^([1-9][0-9]*|0)([\.,][0-9]+)?$/
我将3
换成了+
和\.
换成了[\.,]
【讨论】:
这在函数中也不起作用。点被下一个数字替换。我想要:一个像 x 数字这样的数字。 3 个数字(例如:123456.123)以上是关于使用正则表达式掩码实时控制浮点输入的主要内容,如果未能解决你的问题,请参考以下文章