Javascript:Regex或其他一些控制只读输入的技术
我正在创建类似Windows的计算器。我已经用html构建了我的计算器,并将输入设置为只读,以类似于Windows的输入。现在,我知道您可以通过创建适当的正则表达式来控制基本输入,但是只读的情况是这样的吗 我想要的是,我通过添加事件监听器来控制输入框中的内容,而不是在满足条件时更新输入(我已经这样做了),但是我可以通过使用正则表达式或其他适当的数学算法(如3.55*(4/(1+1))来进一步限制我的代码吗?我希望我清楚我需要什么 我试着设置无数的变量,并用if/switch语句控制它们,最终奏效了,但我花了大约100行代码,很快就变成了一场噩梦,所以我从头开始寻找替代方案,如果我对JS的了解是真的,这是可能的。请只使用纯JS,不要使用其他库。以下是我当前的JS代码:Javascript:Regex或其他一些控制只读输入的技术,javascript,regex,calculator,Javascript,Regex,Calculator,我正在创建类似Windows的计算器。我已经用html构建了我的计算器,并将输入设置为只读,以类似于Windows的输入。现在,我知道您可以通过创建适当的正则表达式来控制基本输入,但是只读的情况是这样的吗 我想要的是,我通过添加事件监听器来控制输入框中的内容,而不是在满足条件时更新输入(我已经这样做了),但是我可以通过使用正则表达式或其他适当的数学算法(如3.55*(4/(1+1))来进一步限制我的代码吗?我希望我清楚我需要什么 我试着设置无数的变量,并用if/switch语句控制它们,最终奏效
const domRef = {
inputMain: document.getElementById('input-main'),
inputSecondary: document.getElementById('input-secondary'),
buttons: document.getElementById('calculator-basic').querySelectorAll('button')
}
function handleClick(event) {
let target = event.target;
if (target.classList.contains('expressions')) { // operands and operators
let input = target.textContent;
updateInputMain(input);
}
}
function handleKeypress(event) {
let target;
for (let i = 0; i < domRef.buttons.length; i++) {
if (domRef.buttons[i].textContent === event.key) {
target = domRef.buttons[i];
target.click();
}
}
}
function updateInputMain(input) {
domRef.inputMain.value += input;
}
for (let i = 0; i < domRef.buttons.length; i++) {
domRef.buttons[i].addEventListener('click', handleClick);
}
document.body.addEventListener('keypress', handleKeypress);
const domRef={
inputMain:document.getElementById('input-main'),
inputSecondary:document.getElementById('input-secondary'),
按钮:document.getElementById('calculator-basic')。querySelectorAll('button'))
}
函数handleClick(事件){
让target=event.target;
if(target.classList.contains('expressions'){//操作数和运算符
让输入=target.textContent;
updateInputMain(输入);
}
}
功能手柄按键(事件){
让目标;
for(设i=0;i
我建议使用专门的库,例如
进行强大的计算变得如此简单:
math.sqrt(-4);//2i
console.log(数学评估(3.55*(4/(1+1)))代码>
我建议使用专门的库,例如
进行强大的计算变得如此简单:
math.sqrt(-4);//2i
console.log(数学评估(3.55*(4/(1+1)))代码>
带有适当平衡括号的公式不是正则语言,因此它们不能用正则表达式解析(有些扩展可能会用到,但我相信它们在标准JS引擎中不可用)。我想你可能是对的,因为我还没有找到任何示例,尽管我已经搜索了好几天了。带适当平衡括号的公式不是一种常规语言,因此它们不能用正则表达式进行解析(有一些扩展是可能的,但我相信它们在标准JS引擎中不可用)。我想你可能是对的,因为我还没有找到任何示例,尽管我已经搜索了好几天了。谢谢你的评论。我意识到我将来必须处理解析问题,math.js可能是解决这个问题的方法,但我想限制只读输入字段以获得“可解析”表达式,这是我使用大量if\else\switch\case语句所做的。我想要的是另一种方法来实现这一点,而不会让我的代码变得如此混乱。以下是我到目前为止的全部代码:感谢您的评论。我意识到我将来必须处理解析问题,math.js可能是解决这个问题的方法,但我想限制只读输入字段以获得“可解析”表达式,这是我使用大量if\else\switch\case语句所做的。我想要的是另一种方法来实现这一点,而不会让我的代码变得如此混乱。以下是我到目前为止的完整代码: