一、方法一:正则表达式
要判断一个字符串为一个运算公式,不包含单独的数字或者负数,可以使用正则表达式来进行匹配。这里默认大家都是学过正则表达式了哈,其实本人也没学过,就临时看看写了。这里在线学习正则网站,可以练练,里面还有一些语法什么的。
毕竟比较赶时间,写的仓促,所以很多地方还是可以优化的。有什么不对的话还请大家多多体谅,谢谢啦 😀 😀 😀 。
1.匹配数字和运算符
regexFormula
用于匹配包含数字和运算符的字符串,例如 “1 + 2 * 3”,但不匹配单个数字和负数的情况。
var regexFormula = /^(\d+|\d+[.]?\d+)([+\-*/](\d+|\d+[.]?\d+))+$/;
这里简单讲解一下该正则表达式各个部分的作用:
/^...$/
:
字符 | 描述 |
^ |
表示从匹配输入字符串的开始位置,除非在方括号表达式中使用, 当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合, |
$ |
匹配输入字符串的结尾位置; |
(\d+|\d+[.]?\d+)
:
字符 | 描述 |
\d+ |
表示匹配一个或多个数字 |
[.]? |
表示匹配可选的小数点(.) |
\d+[.]?\d+ |
表示匹配小数 |
(A|B) |
指明两项之间的一个选择 |
([+\-*/](\d+|\d+[.]?\d+))+
字符 | 描述 |
[+\-*/] |
表示匹配任意个运算符(+、-、*、/) |
(a)+ |
表示匹配多个a |
2.匹配单个数字或者负数
regexNumber
用于匹配包含单个数字或者负数的字符串,例如 “-3” 或 “42”,但不匹配包含多个数字和运算符的运算表达式。
var regexNumber = /^[-]?(\d+|\d+[.]?\d+)$/;
[-]?(\d+|\d+[.]?\d+)
字符 | 描述 |
[-]?(\d+|\d+[.]?\d+) |
表示匹配单个数字或者负数 |
3.匹配多个数字
·regexIeger
用于匹配多个数字,这里好像第二步重复了,可忽略。
var regexIeger = /^\d+$/;
4.对数据进行判断是否能展示
使用上面两个正则表达式可以排除输入字符串中包含单个数字或者负数的情况,而只匹配包含多个数字和运算符的运算表达式,从而判断输入字符串是否为有效的运算表达式。
/** * @author CSH * @function 函数功能:对数据进行判断是否能展示,匹配包含数字和运算符的字符串,不匹配单个数字和负数的情况 * @param {string} displayNumber [需要判断的数据] */ function isShowCalcData (displayNumber){ return regexFormula.test(str) && !regexNumber.test(str) && !regexIeger.test(str) && !isNaN(eval(str)); }
运行测试:
// 示例用法 console.log(isShowCalcData ("1 + 2 * 3")); // true console.log(isShowCalcData ("hello world")); // false console.log(isShowCalcData ("(1 + 2) / 3")); // true console.log(isShowCalcData ("4 + (5 * 6)")); // true console.log(isShowCalcData ("42")); // false console.log(isShowCalcData ("-3")); // false console.log(isShowCalcData ("0-3")); // true console.log(isShowCalcData ("5.5+3.5")); // true console.log(isShowCalcData ("+")); // false
总结
感谢观看,如果有帮助到你,请给文章点个赞和收藏,让更多的人看到。🌹 🌹 🌹
也欢迎你,关注我。👍 👍 👍
原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!