JavaScript基础是math.pow函数中的十进制数

时间:2016-04-26 17:41:23

标签: javascript php regex math

我的问题:在PHP函数代码中应准备好在JavaScript中导出。所以我有这一行:

<div ng-controller="customersCtrl4">
      <p>selected item is : {{selectedItem}}</p>
      <select ng-model="selectedItem.game">
        <option ng-repeat="x in myGames" value="{{x.game.name}}">{{x.game.name}}</option>
      </select>
    </div>
	<div ng-controller="customersCtrl" sytle="color:white">
<ul ng-repeat="x in myName | filter:selectedItem">
<li> <a ng-href="{{x.channel.url}}" target="_blank">{{x.channel.name}}</a>
 </li>
</ul>
</div>

现在问题是$operationvalue_new2 = preg_replace_("#exp\((.*)\^(.*)\)#", "Math.pow($1, $2)", $operationvalue_new2); 的值可以是小数,所以我将不再正确计算。如果$1为1.2,则仅以1计算。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我在你的正则表达式中看到了几个问题:

  • 双引号字符串可能会使反斜杠的转义效率降低,因为正则表达式需要自行转义:尝试使用双引号反斜杠:

    "#exp\\((.*)\\^(.*)\\)#"
    
  • .*尽可能匹配。但这包括exp(1,4);exp(2^4)等案例。使用非贪婪的匹配或排除不需要的字符:

    "#exp\\(([^\\^\\)]*)\\^([^\\^\\)]*)\\)#"        
    
  • 此外,即使使用该修复,匹配任意文本也存在风险,特别是如果生成的文本将成为生成的JavaScript代码的一部分。例如,考虑如果文本包含exp(</script>^5)会发生什么。相反,如果这是意图,则仅匹配格式良好的数字:

    "#exp\\((\\d+(?:\\.\\d+)?)\\^(\\d+(?:\\.\\d+)?)\\)#"