所属专栏:【JavaScript随手笔记】
作 者:我是夜阑的狗
个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!
欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信
大家好,又见面了,我是夜阑的狗,本文是专栏【JavaScript随手笔记】专栏的第5篇文章;
今天的需求是要对字符串进行判断是否能展示,其中要能匹配包含数字和运算符的字符串,不匹配单个数字或者负数的情况;
专栏地址:【JavaScript随手笔记】 , 此专栏是我是夜阑的狗对JS数据处理的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴。
如果文章有什么需要改进的地方还请大佬不吝赐教。
要判断一个字符串为一个运算公式,不包含单独的数字或者负数,可以使用正则表达式来进行匹配。这里默认大家都是学过正则表达式了哈,其实本人也没学过,就临时看看写了。这里在线学习正则网站,可以练练,里面还有一些语法什么的。
毕竟比较赶时间,写的仓促,所以很多地方还是可以优化的。有什么不对的话还请大家多多体谅,谢谢啦 。
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 |
regexNumber
用于匹配包含单个数字或者负数的字符串,例如 “-3” 或 “42”,但不匹配包含多个数字和运算符的运算表达式。
var regexNumber = /^[-]?(\d+|\d+[.]?\d+)$/;
[-]?(\d+|\d+[.]?\d+)
字符 | 描述 |
---|---|
[-]?(\d+|\d+[.]?\d+) |
表示匹配单个数字或者负数 |
·regexIeger
用于匹配多个数字,这里好像第二步重复了,可忽略。
var regexIeger = /^\d+$/;
使用上面两个正则表达式可以排除输入字符串中包含单个数字或者负数的情况,而只匹配包含多个数字和运算符的运算表达式,从而判断输入字符串是否为有效的运算表达式。
/**
* @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
感谢观看,如果有帮助到你,请给文章点个赞和收藏,让更多的人看到。
也欢迎你,关注我。
原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!! 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!
更多专栏订阅:
- 【LeetCode题解(持续更新中)】
- 【Java Web项目构建过程】
- 【数字图像处理】
- ⚽ 【JavaScript随手笔记】
- 【大数据学习笔记(华为云)】
- 【程序错误解决方法(建议收藏)】
- 【软件安装教程】
订阅更多,你们将会看到更多的优质内容!!