【问题标题】:How to get BIRT REGEX MATCH syntax correct如何使 BIRT REGEX MATCH 语法正确
【发布时间】:2021-06-29 22:30:01
【问题描述】:

我试图确保给定的 Birt 参数恰好包含一个、两个或三个 4 位数年份 csv。 所以这些会很好:

2017
2017,2018
=2017
=   2017,2018,   =  2019
2019,2020,2021

这些会很糟糕

abc
2019,2018,2017,2016
2019,dddd,2020

我试过这个:

if(BirtComp.test(params["Fiscal Year"].value,"^ *?=? *?\d\d\d\d *?=? *?(, *?=? *?\d\d\d\d *?=? *?)?(, *?=? *?\d\d\d\d *?=? *?)?$"))
{
yearsValid=true;
} else {
yearsValid=false;
}

但即使参数只有2020这样的4位数字,它也永远不会返回真实。

我在数据集的打开脚本中执行此操作。 它似乎在记事本++中工作正常

作为这里的进一步数据点,这些都未能在 Birt 中的 javascript 中编译,我试图将其放在数据集的 OPEN 底部。请注意,“试试这个”在 notepad++ 中效果很好:

//try this  ^=? *\d{4}(?:[, =]+\d{4}){0,2}$  

//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,"\\d\\d" )); 

//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,/\d\d/ )); 

//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,/\\d\\d/ )); 

//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,/^=? *\d{4}(?:[, =]+\d{4}){0,2}$/ )); 

//generalDebug01 = BirtComp.test(params["Fiscal Year"].value,BirtComp.test(params["Fiscal Year"].value,/^=? *\\d{4}(?:[, =]+\\d{4}){0,2}$/ )); 

有人能指出我做错了什么吗?这更像是一个 Birt javascript 正则表达式问题,而不是一个正则表达式问题。

【问题讨论】:

    标签: javascript regex birt


    【解决方案1】:

    您可以使用此正则表达式进行验证:

    ^\W*\d{4}(?:\W+\d{4}){0,2}$
    

    RegEx Demo

    正则表达式详细信息:

    • ^:开始
    • \W*: 匹配 0 个或多个非单词字符
    • \d{4}:匹配4位数字
    • (?:\W+\d{4}){0,2}:匹配 0 到 2 个由 1 个以上非单词字符分隔的 4 位数字的实例
    • $:结束

    仅根据您的示例,此正则表达式也可能适用于您:

    ^=? *\d{4}(?:[, =]+\d{4}){0,2}$
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2018-10-17
    • 2021-10-05
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多