正则表达式:使用正则表达式仅允许简单算术

时间:2018-07-15 02:01:18

标签: javascript regex

因此,我有一个验证器和一个string.replace()来保护我的基本textarea输入。

我的验证器如下:

Validators.pattern('-?[0-9]+([-+*/]?-?[0-9])*')

本质上,我想允许所有简单的算术。

示例:

2*2-2
2*2--2
-2**2--2

我不想允许*或+之外的多个符号,例如***或+++

验证者应允许的示例:

+
+- (addition of a negative)
-
-- (evaluated as +)
/
*
**

integer (valid expression) integer (valid expression) integer etc.之外的所有内容都应替换为“”。 (作为附加的预防措施,以防验证程序失败):

+++ => +
--- => -
*** => **
/// => /
+-  => -
*/  => // (not sure what to do with this)

我有类似的内容,但需要进行调整才能成为白名单:

unsafeCalculation.replace(/-?[0-9]+([-+*/]{1,2}?-?[0-9])*/, '');

示例:

2**2--2---2+++2///2 => 2**2+2-2+2/2 

让我知道您认为最好的replace正则表达式。

1 个答案:

答案 0 :(得分:1)

正如评论中提到的,您所描述的内容非常接近(如果不是很准确的话)解析。正则表达式解析很糟糕。要获得良好的解析教程,请点击此处:http://lisperator.net/pltut/parser/

也就是说,这很简单,您可以使用RegEx逃脱。您可以尝试在同一字符串上多次替换,而不必尝试创建一个“万事俱备”的正则表达式。这样可以使读写更加清晰。

例如

unsafeCalculation
  .replace(/[+]{2,}/g, '+')
  .replace(/[-]{2,}/g, '-')
  // etc,.