字符串 ‘Regex’ 针对以下情况的验证

huangapple go评论110阅读模式
英文:

String 'Regex' Validation for below scenario

问题

  1. // 我想验证表达式字符串是否符合以下情况
  2. // 1. 表达式应使用 variables 数组的值
  3. // 2. 表达式不应包含除允许的数学函数之外的内容。
  4. // 我尝试了下面的代码
  5. var variables = ['A','B'];
  6. var allowedMathFunc = ['Sin','Cos','Tan'];
  7. var expression= 'Sin(B)+Tan(B)+100+acos(A)';
  8. // 对于变量检查,我尝试了这个
  9. let expressionVariables = expression.replace(/Sin|Log|Exp|Tan|Pos|Rnd|[^A-Za-z]/ig,"");
  10. let expressionUnUsedVar= variables.filter(v=> !expressionVariables.includes(v));
英文:
  1. var variables = ['A','B'];
  2. var allowedMathFunc = ['Sin','Cos','Tan']
  3. var expression= 'Sin(B)+Tan(B)+100+acos(A)+C'

I want to validate expression string match below scenario

  1. expression should use variables array values
  2. expression should not contain other then allowed math functions.

I tried below code

  1. var variables = ['A','B'];
  2. var allowedMathFunc = ['Sin','Cos','Tan']
  3. var expression= 'Sin(B)+Tan(B)+100+acos(A)'
  4. for variable check I tried this
  5. let expressionVariables = value.replace(/Sin|Log|Exp|Tan|Pos|Rnd|[^A-Za-z]/ig,"");
  6. let expressionUnUsedVar= variables.filter(v=> !expressionVariables.includes(v));

I don't know how to write for both scenario for regex it's not a problem for two different regex.

答案1

得分: 1

你可以使用正则表达式提取所有变量和函数名称,然后检查它们是否包含在允许的函数和变量列表中(区分大小写):

  1. function testExpression(expression, vars, funcs) {
  2. const usedVariables = expression.match(/\b[a-z]+\b(?!\s*\()/gi) || [];
  3. const usedFunctions = expression.match(/\b[a-z]+\b(?=\s*\()/gi) || [];
  4. return usedVariables.every(v => vars.includes(v)) && usedFunctions.every(func => funcs.includes(func));
  5. }
  6. var variables = ['A', 'B'];
  7. var allowedMathFunc = ['Sin', 'Cos', 'Tan'];
  8. var expression = 'Sin(B)+Tan(B)+100+acos(A)+C';
  9. console.log(testExpression(expression, variables, allowedMathFunc));
  10. console.log(testExpression('Sin(B)+Tan(B)+100+Cos(A)+C', ['A', 'B', 'C'], ['Sin', 'Cos', 'Tan']));

希望这有所帮助。

英文:

You can use regex to extract all variables and function names, and then check them if they're included in the allowed function and variable lists (case sensitive):

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

  1. function testExpression(expression, vars, funcs) {
  2. const usedVariables = expression.match(/\b[a-z]+\b(?!\s*\()/gi) || [];
  3. const usedFunctions = expression.match(/\b[a-z]+\b(?=\s*\()/gi) || [];
  4. return usedVariables.every(v =&gt; vars.includes(v)) &amp;&amp; usedFunctions.every(func =&gt; funcs.includes(func));
  5. }
  6. var variables = [&#39;A&#39;,&#39;B&#39;];
  7. var allowedMathFunc = [&#39;Sin&#39;,&#39;Cos&#39;,&#39;Tan&#39;]
  8. var expression= &#39;Sin(B)+Tan(B)+100+acos(A)+C&#39;
  9. console.log(testExpression(expression, variables, allowedMathFunc));
  10. console.log(testExpression(&#39;Sin(B)+Tan(B)+100+Cos(A)+C&#39;, [&#39;A&#39;,&#39;B&#39;,&#39;C&#39;], [&#39;Sin&#39;,&#39;Cos&#39;,&#39;Tan&#39;]));

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年2月16日 15:34:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/75469078.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定