Calculator Regex Decimal
Calculator Regex Decimal
我想要一个可以在简单计算器中工作的正则表达式:
现在我有:this.field.value.match(/'./))
我的问题是一次只能插入一个小数:
例如:2.5+2OR3+3.55
我希望能够选择添加2.5+2.5。重点是,我试图阻止有人键入2.5.5.5+5
试试这个
/ *('d+'.?'d*|'d*'.?'d+) *'+ *('d+'.?'d*|'d*'.?'d+) */
匹配
1 + 1
1.0 + 1.0
1. + 1.
0.1 + 0.1
.1 + .1
等等
与不匹配
. + .
1 +
.1 +
1. +
等等…
还匹配输入开头和结尾处+号和之间的空白。
对于2.5 + 2.5
,您可以使用:
/[0-9]'+'.?[0-9]* + [0-9]'+'.?[0-9]*/
无论如何,请记住,regex不能完全解析算术表达式,因为它是一种上下文无关的语法,而regex没有足够的表达能力来覆盖这一点。
因此,我的正则表达式只是针对您的情况提出的一个非常特别的建议。你肯定可以进一步改进它。
'd*(?:'.'d)?'d*'s*'+'s*'d*(?:'.'d)?'d*
匹配
12+2.4
.34 +2
12.34 + .34
但与不匹配
12.34.2 + 2
12.+3
对乘法、除法等所需的其他二进制运算符也执行相同操作。
怎么样:
/^'s*([+-]?(?:'d+'.?'d*|'d*'.'d+))'s*([-+'/*])'s*([+-]?(?:'d+'.?'d*|'d*'.'d+))'s*$/
^--------- group 1 ---------^ ^group2 ^ ^--------- group 3 ---------^
捕获组:
group 1 will contain the first operand (maybe signed)
group 2 will contain the operator (-,+,/,*)
group 3 will contain the second operand (maybe signed)
我认为你可能做得不对。与其尝试正则化所有可能的可接受条目组合,不如确保输入仅包含有效字符,然后尝试计算一个值:
var result;
if(/^[0-9+'-()^*/ .]+$/.test(this.field.value))
try{result=new Function("return "+s+";")();}catch(e){};
if(result==undefined) /* there is a problem */ else /* OK */
好吧,如果你做一个简单的计算器,你必须更好地定义简单对你来说意味着什么。对我来说,这意味着您支持标准运算(+
、-
、/
、*
)、括号()
整数和浮点运算。
解决办法是:没有简单的方法!我的建议是:要评估它,你必须解析它:将每个"数字"减少为一个检查很容易('d+|'d*'.'d+)
,但用正则表达式检查整个结构很难(这意味着,你每次都会得到一些超级复杂的东西和新的角落案例)
另一个简单的解决方案是:检查它是否风险不大(例如,与^['d.+*/()]*$
匹配),并尝试计算eval
如果你的简单比我的简单,你可能会找到一个正则表达式,但这绝对不是最好的路径(用正则表达式解析html有点像:你需要一个上下文解析器)
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- Regex代码只允许一个空格
- Regex匹配除“”之外的所有字符;.js”;
- RegExp:匹配Javascript中除regex值之外的所有内容
- Javascript RegEx validator
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 制作一个regex来验证只有一个数字的字符串
- RegEx JavaScript:数字后的符号提取
- PHP和Javascript之间的Regex差异
- 链接和youtube的Javascript和regex
- 包含圆括号的JavaScript Regex模式
- 相当复杂的Regex
- 如何在ng regex中包含qutoes+双引号
- 在javascript中,I'我很难弄清楚如何让regex只替换捕获而不替换匹配
- Regex提取URL返回数组的一部分;未定义”;
- 将po-box javascript正则表达式转换为c#regex
- Datatables查询url字符串:需要regex来修复url解析
- 要替换的Javascript Regex无法按预期工作
- 如果匹配项在特定的html标记中,则跳过regex匹配
- Calculator Regex Decimal