Java实现字符串检验合法性_js 检验四则运算字符串是否合法

今天一个朋友让帮忙写个检验四则运算式子的js正则表达式,写了一会儿发现有点难。。。

于是想到了这个办法:

function check(str){

try{

str = str.replace(/ /g,'');

if( /^[\d|\-|\+|\*|\/|\.|\(|\)]+$/.test(str) ){

var val = eval(str);

if(typeof val == 'number' && val != Infinity){

return true;

}

}

}catch(e){

//console.log(e)

}

return false;

}

先通过正则筛掉四则运算不会出现的字符,再利用“几乎所有编程语言都可以直接执行四则运算”的“特性”和js的eval函数来实现,

af33f4aaad942c0abf73c26a7c5cd215.png

效果还可以,可能存在的“隐患”是,这些字符如果能组成符合js语法但不是数学式子的字符串。

比如像

1+--+-+-1

是可以通过检验的,并且在js中也是按数学表达式计算结果的, 但是这个算不算“合格”的数学表达式呢?

这个就看具体情况了吧,要规避也比较简单

/[\-|\+|\*|\/]{2,}/.test(str)

可以检测连续出现的运算符

还有一个情况是,0.5 在js中可以简写为 .5  ,再加一条正则解决这个问题

/\D\./.test(str)

检测 . 前面是否是非数字

所以合起来就是:

function check(str){

try{

str = str.replace(/ /g,'');

if( /^[\d|\-|\+|\*|\/|\.|\(|\)]+$/.test(str) ){

//解决连续的运算符

if(/[\-|\+|\*|\/]{2,}/.test(str))return false;

//解决 0.5 简写成 .5

if(/\D\./.test(str))return false;

var val = eval(str);

if(typeof val == 'number' && val != Infinity){

return true;

}

}

}catch(e){

//console.log(e)

}

return false;

}

暂时没发现其他“隐患”了。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值