我正在构建一个JavaScript计算器,一切都已完成,除了有一个问题。当用户键入:
时3**3 or 7++2
这会产生一个解析错误 - 如何检测是否有重复的重复?
如果我们查看字符串3+3+3*2
,可以安全使用,请考虑我们是否使用字符串3++3+2
,因为返回后会被标记为 - + 是不允许的。
因此,如果有两个相同 Type或Ascii值的字符,则将该字符串标记为不安全使用。
答案 0 :(得分:2)
var regexp = /(\+\+|\-\-|\*\*)/;
regexp.test("22++33");

根据相同的建议,您可以通过正则表达式轻松获得匹配。
答案 1 :(得分:2)
您可以在控制台中获取最后一项,如果是操作员,则return false
。考虑一下:
var operator = "/*+-^";
var arithmetic = "", lastItem;
$("span").click(function(){
// check if number is clicked
if($(this).hasClass("num")){
$("#console").append($(this).text());
arithmetic += $(this).text();
}
//get the last item on the console or in arithmetic string
lastItem = arithmetic.substr(arithmetic.length-1, arithmetic.length);
//check if last item is an operator, prevent click of an operator again
if($(this).hasClass('operator')){
if(operator.indexOf(lastItem) > -1){
return false;
}
else{
$("#console").append($(this).text());
arithmetic += $(this).text();
}
}// end if --> checking operator ended.
if($(this).hasClass('equal')){
$("#result").append(eval(arithmetic));
}
});
span{
padding: 5px;
background: #ccc;
margin: 5px;
cursor: pointer;
text-align: center;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="num">1</span>
<span class="num">2</span>
<span class="num">3</span>
<span class="operator">+</span>
<span class="operator">*</span>
<span class="equal">=</span><br/><br/>
<div id="console"> </div> <br/>
<div id="result"> </div>