如何验证Logic Apps Liquid模板上字符串属性是否为数字?

时间:2018-01-18 01:13:43

标签: liquid azure-logic-apps dotliquid

我正在创建一个Liquid模板,我需要验证我的JSON有效内容中的字符串属性是否为数字(仅包含数字)。

我已尝试实施建议here

的提示
{% assign test = "A string" | plus: 0 %}
{{ test }}
{% assign test_d = "123456" | plus: 0 %}
{{ test_d }}
  

{{test}}将打印1,而{{test_d}}将打印123456。   所以你可以检查一下:

{% if test_d != 0 %}
    {{ "I'm a Int!"}}
{% else %}
    {{ "I'm a String!"}}
{% endif %}

here

  

使用assign时,这些选项中的任何一个都应该为您提供一个数字:

{% assign var1 = var1 | plus: 0 %}
{% assign var2 = var2 | times: 1 %}

但是,它们在DotLiquid实现中似乎不起作用。

这是我使用这些提示创建的模板。

{
  {% assign numValue1 = content.myDoc.myProperty | Plus: 0 %}
  {% assign numValue2 = content.myDoc.myProperty | Times: 1 %}
  {% assign numValue3 = content.myDoc.myProperty | Times: 2 %}

  {% if numValue1 != 0 %}
    "validation1": true,
  {% else %}
    "validation1": false,
  {% endif %}

  "numValue1": "{{numValue1}}",
  "numValue2": "{{numValue2}}",
  "numValue3": "{{numValue3}}"

}

但是,过滤器Plus: 0将char'0'连接到字符串,而不是像Ruby实现所描述的那样。 Times重复字符串,而不是按建议返回数字。

当我的属性为12345

时,这是输出
{
    "validation1": true,
    "numValue1": "123450",
    "numValue2": "12345",
    "numValue3": "1234512345"
} 

这是我的财产为ABC123

时的输出
{
    "validation1": true,
    "numValue1": "ABC1230",
    "numValue2": "ABC123",
    "numValue3": "ABC123ABC123"
}

我知道DotLiquid实现与Ruby实现并不完全相同。我检查了DotLiquid的源代码,这些过滤器在我的测试中表现得很好。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在完成DotLiquid代码并检查所有过滤器之后,我想出了这个解决方案。它不是很优雅,但它可以完成这项工作:)

{
  {% assign nonNumericCharsInMyProperty  = content.myDoc.myProperty | Remove: "0" | Remove: "1" | Remove: "2" | Remove: "3" | Remove: "4" | Remove: "5" | Remove: "6" | Remove: "7" | Remove: "8" | Remove: "9" %}

  {%- if content.myDoc.myProperty == '' -%}
    "isValid": false,
    "message": "Invalid Message. myProperty cannot be empty."
  {%- elseif nonNumericCharsInCardNumber != '' -%}
    "isValid": false,
    "message": "Invalid Message. myProperty must be numeric."
  {%- else -%}
    "isValid": true,
    "message": ""
  {%- endif -%}
}