因此,我有一个验证器和一个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
正则表达式。
答案 0 :(得分:1)
正如评论中提到的,您所描述的内容非常接近(如果不是很准确的话)解析。正则表达式解析很糟糕。要获得良好的解析教程,请点击此处:http://lisperator.net/pltut/parser/
也就是说,这很简单,您可以使用RegEx逃脱。您可以尝试在同一字符串上多次替换,而不必尝试创建一个“万事俱备”的正则表达式。这样可以使读写更加清晰。
例如
unsafeCalculation
.replace(/[+]{2,}/g, '+')
.replace(/[-]{2,}/g, '-')
// etc,.