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

标签 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 +)
/
*
**

整数(有效表达式)整数(有效表达式)整数等之外的所有内容都应替换为“”。 (只是作为验证器失败时的额外预防措施):

+++ => +
--- => -
*** => **
/// => /
+-  => -
*/  => // (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 

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

最佳答案

正如评论中提到的,您所描述的内容非常接近(如果不完全准确)解析。正则表达式对于解析来说很糟糕。对于一个好的解析教程,请看这里:http://lisperator.net/pltut/parser/

也就是说,这很简单,您可以使用 RegEx 来摆脱困境。您可以在同一字符串上多次替换,而不是尝试创建一个万能的正则表达式。这使得阅读和书写更加清晰。

例如

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

关于javascript - 正则表达式:使用正则表达式仅允许简单算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51344700/

相关文章:

javascript - Grunt Task Runner 连接文件

javascript - mvc $ ('form' ).submit 不在部分 View 上执行

javascript - 获取表格组件的行数

c# - C#正则表达式过滤YouTube视频的ID

javascript - 异步代码会导致内存泄漏吗?

javascript - SAP Cloud SDK for JavaScript 的 AttachmentService 问题

python - 使用 Python 从 HTML 中的 href 属性中提取 URL 的正则表达式

sql - 如何使用 sql 样式转义正则表达式匹配字符串?

javascript - 如何使用正则表达式将字符串替换为自身?

python - 从 python 的肯定后向断言中获取匹配的第二次出现